Я больше не могу использовать cd при использовании его в скрипте bash
[~/Downloads] # cat cd-backward
#!/bin/bash
cd ..
[~/Downloads] # ./cd-backward
[~/Downloads] #
Я должен перейти к ~ в последней строке.
cd отлично работает в терминале странно. Ничего не происходит, например, когда я запускаю bash -c 'cd Download.
Когда вы запускаете скрипт, он запускается в своей оболочке, как уже упоминал Аркадиуш. В этом случае у вас есть экземпляр bash. Вы можете увидеть это, если вы измените скрипт:
#!/bin/bash
cd ..
pwd
Пример прогона в моей системе дает:
bash-4.3$ pwd
/home/xieerqi/Downloads
bash-4.3$ ./cd-backward
/home/xieerqi
bash-4.3$ pwd
/home/xieerqi/Downloads
Достаточно подходящим образом, в подстроке скрипта вы переходите к домашней директории , Однако текущий рабочий каталог родительской оболочки остается неизменным
Ваш процесс (называемый $$) имеет «Текущий каталог», ~/Downloads.
Когда вы ./cd-backward, этот скрипт Bash запускается в своем собственном процессе, который имеет свой собственный «Текущий каталог», который начинается с ~/Downloads.
cd .. влияет на «Текущий каталог» процесса ./cd-backward, меняя его на ~, но НЕ влияя на «Текущий каталог» вашего исходного процесса.
] ./cd-backward завершается, его процесс завершается, а cd .. забывается.
Вот два способа повлиять на мой собственный «Текущий каталог», хранящийся в моем «~ / .bashrc»:
Сначала несколько alias es: [!d5 ]
alias ..='cd ..'
alias ...='cd .. ; cd ..'
Вот как я сохраняю текущий каталог в заголовке окна (через перехват cd):
# from the "xttitle(1)" man page - put info in window title
update_title()
{
[[ $TERM = xterm ]] || [[ $TERM = xterm-color ]] && xttitle "[$$] ${USER}@${HOSTNAME}:$PWD"
}
cd()
{
[[ -z "$*" ]] && builtin cd $HOME
[[ -n "$*" ]] && builtin cd "$*"
update_title
}