Pull to refresh

Comments 17

В bash есть опция autocd, при которой bash будет менять каталог, если просто ввести его имя:
[user@host /]$ shopt -s autocd
[user@host /]$ tmp
cd tmp
[user@host /tmp]$
а еще если иногда путаете команды cp и rm то можно сделать логику типа "если у команды 1 аргумент — то удаляем файл, а если 2 — то копируем" ...
За всю свою долгую практику — никогда так не путал команды :)
А вешать всякие функции на rm/cp вообще мягко говоря опасно и грозит хорошим таким факапом.
Представим ситуацию кога у нас есть папка с названием example.com:
cd example.com
ls
# Через некоторое время 
systemctl suspend

п.с. Очень плохая идея, нужно хотябы предупреждать как в zsh autocorrect.
п.с.с. Сори промахнулся, это было ответ на пост
Ну кстати обычно поэтому выводят hostname в приглашении и лично я использую разные цвета. То есть, если ты на продакшене, то приглашение будет другого цвета, чем если на локальной машине. Ну и latency при вводе обычно тоже присутствует, поэтому перепутать локальную машину и удаленную в консоли должно быть довольно тяжело, даже если директории такие создаются :))
А что если директория монтировано по sshfs?
latency при cd example.com будет есстественным а при вводе может вообще не присувствоват если канал хороший.
Ну и человек который перепутал ssh с cd вполне может и не заметит hostname.
Также, при логине по ssh обычно выводится motd и "last login ...", поэтому это тоже должно человека насторожить, если их нет. Ну и к тому же набрать reboot на локальной машине вместо сервера, как правило, имеет меньший эффект, чем reboot, набранный на сервере вместо локальной машины. То есть, проблема в любом случае присутствует и все равно нужно быть внимательней с деструктивными командами :). Сделать похожее для rm и cp у меня тоже были идеи, но это слишком опасно.
Сделать похожее для rm и cp у меня тоже были идеи, но это слишком опасно.

Для rm полезьно было бы написать что то типа mv "$@" ~/.Trash :)
попробуйте использовать fqdn, в том числе в PS1.
# нужно назвать файл ssh, cd или vim и поместить скрипт в $PATH перед настоящими утилитами,
# например в директорию /bin, которая почти всегда идет перед /usr/bin, в которой как правило лежат vim и ssh

Правильно начали и скверно закончили. Нужно бы как-то так: поместите свои утилиты в ~/bin/ (или любую другую директорию) и поместите путь к этой директории в начало значения переменной PATH:
export PATH=~/bin/:${PATH}
А как же "cd -"? Вы же его совсем сломали.
И вы правда всегда опции все в конец ставите? Это же неудобно.
И, кстати, запуск cd или vim вообще без опций и имени файла тоже приводит к весьма неожиданным последствиям.
Этот код нужно поместить в ".bashrc" и перезапустить bash.
Ну зачем же сразу перезапускать? Можно же просто засорсить.
source ~/.bashrc не всегда приводит к нужному эффекту. Например, если в .bashrc написано 'export PATH="$HOME/bin:$PATH";', то при source ~/.bashrc переменная PATH будет содержать директории по 2 и более раз. Так что "exec bash -l" работает более предсказуемо
С аргументами для cd согласен, недоработочка. Но это было сделано сознательно с целью упрощения статьи.
Так секундочку, кто то не согласился с концепцией (или не осилил) всё есть файл и проблемами которые оно порождает и решил переопределить стандартные команды для решения этих проблем, я правильно понимаю? Ну тогда вы как то мелко плаваете, функции для баша пишете, вам надо написать тогда сразу свою оболочку. (и вообще я рекомендовал бы вам взяться сразу за всю операционную систему)
Честно говоря, не очень понял, как связаны концепции «все есть файл» и то решение, которое я (в шутку) предложил?
А ведь автор в самом деле шутит — дата публикации. Жестокие шутки у вас :)
Sign up to leave a comment.

Articles