Запустите скрипт, используя пользовательскую среду. вар. и работает реж без лишних снарядов
Я пытаюсь создать сценарий, который запускает другой сценарий и имеет его как ребенка напрямую. Мои цели:
- дочерняя программа должна видеть другой $HOME
- дочерний скрипт должен запускаться в другом каталоге, чем текущий рабочий каталог (т. е. другой pwd)
- без лишних снарядов
Я достиг первых двух целей с помощью подоболочек и exec, но мне еще предстоит управлять третьей. Может ли кто-нибудь помочь мне?
Вот подробности. Для простоты описания я назову первый скрипт run
и другая программа sleepcmd
, Вот содержимое сценария sleepcmd
echo $HOME && exec sleep 1000
Вот содержимое сценария запуска
(HOME=~/foo/bar && cd $HOME/bin && ./sleepcmd)
Добавление exec перед вызовом./sleepcmd, т.е.
(HOME=~/foo/bar && cd $HOME/bin && exec ./sleepcmd)
получает это только к одной дополнительной оболочке по сравнению с непосредственным запуском sleepcmd (или sleep).
Как я могу сделать лучше, чем это, и избавиться от () подоболочки, все еще вызывая sleep 1000
с другим $HOME и рабочим каталогом?
2 ответа
Пытаться
pushd
VAR=value command [args...]
popd
например
pushd ~/foo/bar/bin
HOME=~/foo/bar ./sleepcmd
popd
Вы можете попробовать использовать команду "source" в файле (например, "myscript"), содержащем новую среду и команды, например
source myscript
или же
. myscript
и установить новую среду в верхней части myscript. Тем не менее, вам придется вернуть среду обратно к тому, что было раньше в конце myscript, или она будет продолжена в вашем основном скрипте.