Подтвердить что ты не робот

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

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

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

Как вы это делаете в оболочке script?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

(cd wherever; mycommand ...)

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

Ответ 3

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

Ответ 4

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

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

Enjoy