Как Bash выполнить команду в другом контексте каталога?
У меня есть общая команда, которая вызывается из очень специфических каталогов. В этой программе есть только одно исполняемое сидение в /bin, и текущий рабочий каталог очень важен для правильного его запуска. script влияет на файлы, которые живут внутри каталога, в котором он запущен.
Теперь у меня также есть пользовательская оболочка script, которая делает некоторые вещи в одном каталоге, но мне нужно вызвать эту команду, упомянутую выше, как если бы она была в другом каталоге.
Как вы это делаете в оболочке script?
Ответы
Ответ 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