1

Платформа: CentOS 6.2 Оболочка: tcsh

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

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

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

  2. Вы можете углубиться дальше назад в истории с - флаг, а - ля в браузере?

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

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

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

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

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

    Однако, когда я набираю cd --help он выдает Usage: cd [-plvn][-|<dir>]. ,

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

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

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

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

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

1 ответ1

3
  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 выводит окончательный стек каталогов, как каталоги. Флаги -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 и т.д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .