Как Bash может выполнить команду в другом контексте каталога?


У меня есть команда, которая вызывается из очень конкретных каталогов. Существует только один исполняемый файл, сидящий в / bin для этой программы, и текущий рабочий каталог очень важен для его правильного запуска. Сценарий влияет на файлы, которые находятся внутри каталога, в котором он выполняется.

теперь у меня также есть пользовательский скрипт оболочки, который делает некоторые вещи в одном каталоге, но мне нужно вызвать эту команду, упомянутую выше, как если бы она была в другом справочник.

Как это сделать в сценарии оболочки?

4 51

4 ответа:

можно использовать cd встроенные или pushd и popd встроенные для этой цели. Например:

# do something with /etc as the working directory
cd /etc
:

# do something with /tmp as the working directory
cd /tmp
:

вы используете встроенные имена так же, как и любую другую команду, и можете изменять контекст каталога столько раз, сколько вам нравится в скрипте.

использовать cd в подоболочке; сокращенный способ использовать этот вид подоболочки-скобки.

(cd wherever; mycommand ...)
(cd /path/to/your/special/place;/bin/your-special-command ARGS)

если вы хотите вернуться в свой текущий рабочий каталог:

current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
  1. мы устанавливаем переменную current_dir равную pwd
  2. после этого мы собираемся cd туда, где вам нужно запустить свою команду
  3. тогда мы запускаем команду
  4. тогда мы собираемся cd вернемся к нашей переменной current_dir

наслаждайтесь