`cd` не работает, если используется в сценарии bash [duplicate]

Этот вопрос уже имеет ответ здесь: Почему не “ cd ” работать в сценарии оболочки? 3 ответа

Я больше не могу использовать cd при использовании его в скрипте bash

[~/Downloads] # cat cd-backward
#!/bin/bash
cd ..

[~/Downloads] # ./cd-backward
[~/Downloads] #

Я должен перейти к ~ в последней строке.

cd отлично работает в терминале странно. Ничего не происходит, например, когда я запускаю bash -c 'cd Download.

1
задан 20 April 2018 в 16:10

2 ответа

Когда вы запускаете скрипт, он запускается в своей оболочке, как уже упоминал Аркадиуш. В этом случае у вас есть экземпляр 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

Достаточно подходящим образом, в подстроке скрипта вы переходите к домашней директории , Однако текущий рабочий каталог родительской оболочки остается неизменным

1
ответ дан 23 May 2018 в 05:32

Ваш процесс (называемый $$) имеет «Текущий каталог», ~/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
}
1
ответ дан 23 May 2018 в 05:32

Другие вопросы по тегам:

Похожие вопросы: