cd -
cd -
перенесет вас в ранее использовавшийся каталог (если он есть) или выдаст ошибку.
Если ранее использовавшийся каталог существует, он изменит его, обновляя значение текущего рабочего каталога и предыдущего, возвращая статус успешного завершения (0
).
В противном случае он напечатает сообщение об ошибке и вернет состояние выхода (1
).
Сделайте свою собственную проверку с cd -; echo $?
,
Статус выхода станет важным, когда вы будете использовать его в скрипте.
Состояние выхода, отличное от 0, может остановить выполнение всего скрипта (если есть set -e
) или, что еще хуже, может привести к точке выхода команды cd -
, отличной от той, о которой вы думали, когда писали Сценарий и выполнять команды не в том каталоге: представьте, что вы запускаете в dir0; после того, как вы перейдете на dir1, вы не сможете перейти на dir2. Теперь вы выполняете cd -
. Вы думаете, что находитесь в dir1, но вместо этого вы находитесь в dir0 ... и отсюда все это в руках Судьбы.
cd $OLDPWD
(или cd $owd
)
cd
- это внутренняя команда всех оболочек (все, начиная с sh
).
Под dash
и bash
он установит переменную PWD
, OLDPWD
для текущего и старого рабочего каталога. Под csh
и tcsh
вместо него будут установлены cwd
и owd
.
Таким образом, с помощью команды cd $OLDPWD
в bash или cd $owd
в tcsh вы попадете в старый рабочий каталог, если он существует, или в свой домашний каталог, если эта переменная не установлена.
Код выхода будет всегда 0
, если у вас есть доступ к вашему домашнему каталогу (1).
pushd newdir ... popd
pushd
добавляет каталог в стек, а popd
удаляет один из стека. Преимущество cd -
это то, что вы будете выбирать, когда вернуться в подписанный каталог, и вам не придется возвращаться в последний. Еще одним преимуществом является то, что вы можете сложить несколько каталогов и решить, к какому из них перейти. help pushd
и help popd
для получения информации об этих встроенных командах.
Заметки:
cd $NotAlreadySetVariable
эквивалентна записи cd
без каких-либо параметров, которые приведут вас в домашний каталог. Если быть точным, то вы попадете в каталог внутри $HOME
(для bash, dash ...) или $home
(для csh, tcsh ...). Если этот каталог не существует или недоступен, вы получите сообщение об ошибке. Если $HOME
(или $home
) пуст, вы останетесь в текущем каталоге, ошибка не будет сгенерирована, и значение $OLDPWD
(или $owd
) будет установлено в текущем каталоге.
$OLDPWD
, $owd
может быть полезна, если вы хотите использовать предыдущий каталог в качестве параметра для команды. Например, вы хотите переместить все файлы из текущего каталога в старый: mv * $OLDPWD
.
тривиальный
От man bash
следует отметить, что в определении PWD используется текущий рабочий каталог (cwd), а не что-то вроде текущего рабочего каталога (PWD) ...
PWD The logical value of the current working directory.
This is set by the cd command.
OLDPWD The previous logical value of the current working directory.
This is set by the cd command.
HOME The home directory of the current user; the default argument for
the cd builtin command. The value of this variable is also used when
performing tilde expansion.
от man tcsh
cd и pushd интерпретируют `- 'как старый рабочий каталог (эквивалентно переменной оболочки owd). Это не замена вообще, а сокращение, распознаваемое только этими командами. Тем не менее, это тоже можно предотвратить путем цитирования.