Почему не & ldquo; cd & rdquo; работать в сценарии оболочки?

Что не так с этим простым скриптом? Я просто хочу написать скрипт, который меняет мой каталог:

A. Я помещал ниже команды в файл, где его имя меняет каталог в каталоге /home/alex,

#!/bin/sh
cd /home/alex/Documents/A/B/C
echo HelloWorld

B. также я сделал chmod +x pathABC. На терминале, когда я нахожусь в каталоге /home/alex, я запускаю ./pathABC.

Но выход - это просто ./pathABC , и текущий каталог остается без изменений. Я имею в виду, что мой каталог остается как /home/alex, а не ходит в /home/alex/Documents/A/B/C.

Итак, где не так?

1
задан 10 November 2017 в 17:38

2 ответа

Когда вы запускаете скрипт в терминале, выполняется дочерний процесс. В этой дочерней программе, т. Е. Ваш скрипт изменится на любой указанный каталог. Но в родительском процессе, т.е. где вы запускаете скрипт, все еще находится в старом пути. ИЛИ просто мы можем сказать:

The scope of cd command is only for child process not parent

7
ответ дан 24 May 2018 в 06:46
  • 1
    Добавляя к этому @alex для достижения эффекта, который вы ищете, выполните сценарий внутри родительского процесса, используя его: либо . pathABC, либо source pathABC. – zwets 11 June 2014 в 14:26

Вы делаете ошибку мышления. Хотя текущий терминал остается в том же каталоге, сценарий переместился в новый каталог.

Вы могли видеть это, создав еще один скрипт в каталоге terminal и добавив его в ваш скрипт после изменения каталога:

#!/bin/sh
cd /home/alex/Documents/A/B/C&&./another_script.sh (if it is executable)

Скрипт (второй) будет запускаться из нового каталога.

HelloWorld 

- это только результат скрипта. [ ! d6]

4
ответ дан 24 May 2018 в 06:46
  • 1
    HelloWorld не «возвращен». к исходной оболочке, он выводится на стандартный вывод – Mog 11 June 2014 в 17:01

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

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