2016-09-24 4 views
0

Я новичок в создании сценариев bash. Это может быть очевидным для многих. пожалуйста, несите меня.разъяснение о скрипте bash

У меня есть скрипт следующим образом:

#!/bin/bash 
echo `pwd` 
cd /home/foo/bar 
echo `pwd` 

Допустим, я в настоящее время в директории:/Главная/foo1

Если я исполняю выше сценарий печатает:

/home/foo1 
/home/foo/bar 

Но как только скрипт завершает выполнение, я видел, что он все еще остается в каталоге/home/foo1

Я также видел некоторые сценарии, где есть явные команды для сброса рабочего каталога с помощью команды «cd -».

Если bash выполняет все строки в скрипте как команды, почему он снова перезагружает рабочий каталог?

ответ

1

Когда вы запускаете интерактивную сессию bash и из нее вы выполняете скрипт (например, ./myscript.sh), то bash создает новый процесс bash для выполнения сценария. Первоначально этот процесс получает копию той же среды, что и исходный процесс (например, текущий рабочий каталог или переменные среды), но если сценарий каким-то образом изменяет среду, это влияет только на новый процесс, а не на исходный. Поэтому, когда скрипты завершаются, вы возвращаетесь к исходному процессу, который сохраняет исходную среду. Таким образом, невозможно изменить текущий каталог исходной оболочки из сценария.

В качестве примечания, следующая строка

echo `pwd` 

не имеет особого смысла. Вы либо должны сделать echo $PWD, либо просто pwd.

+1

Это. Кроме того, попробуйте выполнить свой скрипт с помощью: 'source myscript.sh' –

Смежные вопросы