
Платформа: CentOS 6.2
Корпус:tcsh
Я экспериментировал со cd
скриптом BASH и заметил чудесноеcd -
вариант, но осталось много вопросов...
- Почему
cd -
? Разве это не избыточно сcd ..
?
РЕДАКТИРОВАТЬ
[Как указывает FatalError, эти две команды не делают одно и то же... поэтому ответ — «нет»] - Можно ли глубже погрузиться в историю с помощью
-
флага, как в браузере?
Например, когда я набираюcd -
, он переносит меня в предыдущий каталог, но если я снова ввожу эту команду, он переносит меня в каталог, из которого я только что пришел, создавая своего рода цикл.
Поддерживается ли сокращение для возврата на несколько уровней назад?
РЕДАКТИРОВАТЬ
Я понимаю, что могу вернуться кcd ..
, но надеялся, что это может стать переходом к менее многословному глубокому возврату, например,cd -3
противcd ../../../
... надеюсь, это проясняет то, о чем я спрашиваю...
ПРАВКА2
Что касается текущего отзыва, while..
— это специальный каталог, я не вижу причин, по которым встроенныйcd
терминал не мог бы использовать сокращение для../../ ... ../
egcd ..5
или почему встроенный терминал также не мог бы иметь историю (а-ля autopushd
/popd
), которую можно было бы включить и использовать какcd -3
. Я понимаю, что это может быть неким риском для безопасности/конфиденциальности, но я не вижу, чем это хуже, чем хранение истории команд, что делают большинство оболочек/терминалов. - Страница руководства для
cd
, доступная черезman cd
иhelp cd
(она одинакова для обеих команд), содержит только списки-L
и-P
флаги.
Однако, когда я ввожу,cd --help
выводитсяUsage: cd [-plvn][-|<dir>].
.
Прав ли я, предполагая, что другие флаги и опция - (назад) нестандартны? - Для чего нужны флаги
-n
и-v
?
Оба, похоже, возвращают меня в мой домашний каталог, это все, что мне удалось выяснить экспериментальным путем.
Краткое чтение веб-ресурсов[1][2]предлагал ту же информацию, что и страница руководства, и не отвечал на мои вопросы.
Примечание: во втором ресурсе, ориентированном на Linux, как заявлено выше, cd
было всего две опции (что, очевидно, не соответствует действительности в текущем CentOS
), поэтому я предполагаю, что эта функциональность может быть нестандартной.
решение1
cd -
не то же самое, чтоcd ..
.cd -
Команда переходит кпредыдущийкаталог, в котором вы находились. Например, если вы находитесь в/home/bob
и затем запускаетеcd /var/log
, то запускcd -
вернет вас в/home/bob
.cd ..
С другой стороны, всегда переходит в родительский каталог.Если вы хотите сохранить такую историю, я предлагаю вам ознакомиться с ,
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, которая ссылается на родительский каталог.cd
это встроенная команда, поэтому ее флаги и использование могут различаться в зависимости от оболочки. Но, в общем, опции дляcd
однойbash
системы должны быть такими же, как и в другой системе.В моей
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
один раз, и так далее.