перейдите к предыдущему каталогу без эха имени каталога

9

Этот ответ позволил мне cd -перейти к моей предыдущей директории в Bash. У него действительно есть серьезная проблема: он печатает каталог, на который он изменяет, тратя мое пространство экрана, так как этот каталог затем повторяется в приглашении на следующей строке.

Я знаю, что могу сделать cd $OLDPWD, также упоминается в этом ответе, cd - >/dev/nullно это гораздо больше печатать.

На bashстранице руководства это говорит:

... или, если - это первый аргумент, и смена каталога прошла успешно, абсолютный путь к новому рабочему каталогу записывается в стандартный вывод.

Как я могу сделать, чтобы -не быть первым аргументом? Используя какой-либо из cdнеобязательных аргументов? Любой другой способ подавить эхо или минимизировать ввод без необходимости определения функций / псевдонимов на каждой машине, с которой я работаю?

Ishran
источник
Почти

Ответы:

12

cdучитывает только первый аргумент, игнорируя все остальные. Ни одна из опций не влияет на эхо предыдущего имени пути (возможно, документированный -@действительно имеет такой эффект, но это недопустимая опция в моей системе).

Если вы не хотите использовать псевдоним / функцию, которая может дать вам еще меньше символов для ввода cd -или перенаправления /dev/null, я предлагаю начать использовать специальное расширение тильды в bash:

cd ~-

С bashman-страницы:

Если префикс тильды равен «~ -», значение переменной оболочки OLDPWD, если оно установлено, подставляется.

Кажется, это еще одна область, в bashкоторой было создано особое значение. Тильды обычно работают на $ DIRSTACK, манипулирует / расследуется pushd, popdи dirsон может быть использован в других командах , а также ( cp ~-/somefile .) , и если вы использовали pushdвы можете использовать ~N(где N представляет собой число уровней оттеснили) , чтобы добраться до эти каталоги (для cdили других команд).


Кстати, если у вас есть учетные записи на нескольких компьютерах и предполагается, что вы используете ssh для входа в них из одного места, вы должны рассмотреть возможность добавления в ~/.bashrc:

if [ -f ~/.bash_common ]; then
    . ~/.bash_common
fi

а затем на вашей рабочей машине есть скрипт, который использует scp«push» bash_commonдля каждой из этих машин. Таким образом, вы можете добавлять и совместно использовать общие функции на нескольких машинах с минимальными издержками.

Энтон
источник