Запустите скрипт, используя пользовательскую среду. вар. и работает реж без лишних снарядов

Я пытаюсь создать сценарий, который запускает другой сценарий и имеет его как ребенка напрямую. Мои цели:

  • дочерняя программа должна видеть другой $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, или она будет продолжена в вашем основном скрипте.

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