CD Command Linux и Mystery Flags

1

Платформа: CentOS 6.2Shell:tcsh

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

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

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

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

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

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

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

    РЕДАКТИРОВАТЬ2
    Что касается текущей обратной связи, в то время как ..это специальный каталог, я не вижу причины, почему встроенный в 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), поэтому я предполагаю, что эта функциональность может быть нестандартной.

Джейсон Р. Мик
источник
Возможно, вы используете встроенную функцию, предоставляемую tcshвызванным cdи не вызывающим /bin/cd(если вы явно не укажете /bin/cdв командной строке) - это, вероятно, объясняет разницу в поведении. Я не достаточно осведомлен, tcshчтобы помочь вам в дальнейшем. Попробуйте набрать help cd(это для bash, не знаю, как это будет работать tcsh...)
LawrenceC
Просто добавлю, что выполнение /bin/cdбудет довольно бессмысленным (в cdзначительной степени это должно быть встроено, чтобы быть полезным). Я уверен, что он существует только для того, чтобы удовлетворить некоторые неясные требования POSIX.
FatalError
Ах, интересно, ты прав, это tcshконкретно ... это немного странно. Мне все еще интересно, что делают дополнительные флаги. help cdвыводит ту же информацию, что и man cd, как я уже упоминал ... не знаю, для чего tcshнужны дополнительные флаги во встроенном.
Джейсон Р. Мик
Что касается 3, многоуровневая " cd ..": обратите внимание, что история команд позволяет вам делать cd .. <Enter> <Up> <Enter> <Up>и так далее быстро перемещаться назад по дереву файлов. Возможно, я в основном нахожу это более удобным из-за моей конкретной локали клавиатуры, которая /находится за модификатором shift.
Даниэль Андерссон
правда, но тогда у вас есть 3-5 cd ..помет вашей истории команд, что меньше, чем оптимальное. cd ..5встроенный будет не только меньше набирать и легко реализовать, было бы также оставить историю чище. Мне удивительно, что я, возможно, первый, кто об этом подумал. : P
Джейсон Р. Мик

Ответы:

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один раз, и так далее.

Фатальная ошибка
источник
1 - да, хорошая мысль. 2 - хорошая мысль, забыл об этом .... Я вижу, как это сделало бы стенографию проблематичной для истинной истории, которая может быть в несвязанных каталогах. 3. Интересно 4. Как я упоминаю в комментарии, я использую tcsh... Я думаю, я немного запутал проблему, сказав, что я хотел написать bash-script, так что исправляю это сейчас ...
Джейсон Р. Мик
PS Я голосовал вас, но вы не объясните , что эти нестандартные флаги делают в tcsh«s cdвстроенный, так что я все еще жду более полного решения. Также кажется, что cd ..5(вернитесь на 5 каталогов) и cd -5(вернитесь к истории каталогов на 5 каталогов) могли бы быть полезными дополнениями к встроенной оболочке cd, как я объясню во втором своем редактировании.
Джейсон Р. Мик