cd Команда Linux и таинственные флаги

cd Команда Linux и таинственные флаги

Платформа: CentOS 6.2Корпус:tcsh

Я экспериментировал со cdскриптом BASH и заметил чудесноеcd -вариант, но осталось много вопросов...

  1. Почему cd -? Разве это не избыточно с cd ..?

    РЕДАКТИРОВАТЬ
    [Как указывает FatalError, эти две команды не делают одно и то же... поэтому ответ — «нет»]

  2. Можно ли глубже погрузиться в историю с помощью -флага, как в браузере?

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

    Поддерживается ли сокращение для возврата на несколько уровней назад?

    РЕДАКТИРОВАТЬ
    Я понимаю, что могу вернуться к cd .., но надеялся, что это может стать переходом к менее многословному глубокому возврату, например, cd -3против cd ../../../... надеюсь, это проясняет то, о чем я спрашиваю...

    ПРАВКА2
    Что касается текущего отзыва, while ..— это специальный каталог, я не вижу причин, по которым встроенный cdтерминал не мог бы использовать сокращение для ../../ ... ../eg cd ..5или почему встроенный терминал также не мог бы иметь историю (а-ля auto pushd/ popd), которую можно было бы включить и использовать как cd -3. Я понимаю, что это может быть неким риском для безопасности/конфиденциальности, но я не вижу, чем это хуже, чем хранение истории команд, что делают большинство оболочек/терминалов.

  3. Страница руководства для cd, доступная через man cdи help cd(она одинакова для обеих команд), содержит только списки -Lи -Pфлаги.

    Однако, когда я ввожу, cd --helpвыводится Usage: cd [-plvn][-|<dir>]..

    Прав ли я, предполагая, что другие флаги и опция - (назад) нестандартны?

  4. Для чего нужны флаги -nи -v?

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

Краткое чтение веб-ресурсов[1][2]предлагал ту же информацию, что и страница руководства, и не отвечал на мои вопросы.

Примечание: во втором ресурсе, ориентированном на Linux, как заявлено выше, cdбыло всего две опции (что, очевидно, не соответствует действительности в текущем CentOS), поэтому я предполагаю, что эта функциональность может быть нестандартной.

решение1

  1. cd -не то же самое, что cd ... cd -Команда переходит кпредыдущийкаталог, в котором вы находились. Например, если вы находитесь в /home/bobи затем запускаете cd /var/log, то запуск cd -вернет вас в /home/bob. cd ..С другой стороны, всегда переходит в родительский каталог.
  2. Если вы хотите сохранить такую ​​историю, я предлагаю вам ознакомиться с , pushdкоторая popdпозволит вам использовать «стек каталогов»:

    user@host:/etc/init.d$ pushd /var/log
    /var/log /etc/init.d
    user@host:/var/log$ pushd /tmp
    /tmp /var/log /etc/init.d
    user@host:/tmp$ popd
    /var/log /etc/init.d
    user@host:/var/log$ popd
    /etc/init.d
    

    Что касается возврата на несколько уровней назад в дереве каталогов, то, насколько мне известно, общепринятого способа нет. ..Это не функция оболочки, а на самом деле специальная ссылка на каталог в *nix, которая ссылается на родительский каталог.

  3. cdэто встроенная команда, поэтому ее флаги и использование могут различаться в зависимости от оболочки. Но, в общем, опции для cdодной bashсистемы должны быть такими же, как и в другой системе.

  4. В моей bashоболочке нет ни одного из этих флагов... вы экспериментируете с использованием bashили tcsh? Если вы используете, tcshто по сути вы используете совершенно другую команду, так что вам, вероятно, захочется запустить ее bashи поиграться с cdней.

РЕДАКТИРОВАТЬ:

Согласно tcshстранице руководства:

С -p печатает окончательный стек каталогов, как и dirs. Флаги -l, -n и -v имеют тот же эффект на cd, что и на dirs, и они подразумевают -p.

(Вы можете проверить раздел о , dirsесли хотите прочитать подробности.) Похоже, что это в основном заставляет его печатать стек каталогов после запуска команды:

host:43> pushd /etc/init.d
/etc/init.d ~ 
host:44> pushd /var/log
/var/log /etc/init.d ~ 
host:45> pushd /tmp
/tmp /var/log /etc/init.d ~ 
host:46> cd -p
~ /var/log /etc/init.d ~ 
host:47> cd -v
0       ~
1       /var/log
2       /etc/init.d
3       ~
host:48> popd
/var/log /etc/init.d ~ 
host:49> cd -v
0       ~
1       /etc/init.d
2       ~

Оба показывают стек каталогов, но -vкажется немного более простым для чтения. Верхняя часть стека (элемент 0) — это текущий каталог, а 1 — это то, куда вы попадете, если выполните popdодин раз, и так далее.

Связанный контент