У нас есть env (1) для изменения среды команды, которую мы хотим запустить (например env MANPAGER=more man dtrace
). Есть ли что-то подобное, кроме как для изменения каталога, в котором будет запускаться команда?
В идеале мне бы хотелось, чтобы это выглядело так:
theMagicCommand /new/cwd myProgram
Таким образом, он может быть «связан» с другими командами, подобными env (1), например:
daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram
До сих пор я могу думать о следующем решении, которое, к сожалению, не имеет того же интерфейса, что и env (1):
cd /new/cwd && myProgram
Кроме того, я могу просто создать простой скрипт оболочки:
#! /bin/sh -
cd "${1:?Missing the new working directory}" || exit 1
shift
exec "${@:?Missing the command to run}"
но я ищу что-то, что уже существует (по крайней мере, в MacOS и FreeBSD).
myProgram
не обязательно является настольным приложением (в этом случае я мог бы просто использовать ключ Path в файле .desktop ).
cd /new/cwd && env VAR=value myProgram
не соответствует вашему критерию?env
. Посмотритеenv
. Сравните этоrtprio
,idprio
,numactl
,jexec
,chrt
, и в самом деле команды в наборы инструментов упоминается в ответах. Там есть шаблон, и это цепная загрузка.(cd the/cwd; cmd)
?(cd the/cwd; cmd)
к env (1), не заключая его в sh (1).Ответы:
AFAIK, в сундуке с инструментами POSIX нет такой специальной утилиты. Но обычно вызывается
sh
для настройки среды (cwd, limit, stdout / in / err, umask ...) перед выполнением команды, как вы делаете в своемsh
скрипте.Но вам не нужно писать этот скрипт в файле, вы можете просто вставить его:
(при условии, что каталог не
-
). ДобавлениеCDPATH=
(в случае, если оно есть в окружении) и-P
его поведение более прямолинейноchdir()
.Кроме того, вы можете использовать
perl
чей-chdir()
то прямоchdir()
из коробки.источник
sh
, вы также можете сделать(cd /wherever && exec /my/command)
.()
Неявно открывает подоболочку для запуска обернутых команд, и, конечно же ,exec
избавляется от дополнительного процесса оболочки так быстро , как/my/command
начинает работать.Наборы инструментов, используемые в мире daemontools и в других местах, имеют это и многое другое; имели в течение многих лет; и широко доступны.
runtool
:cd
:chdir
:Все это инструменты для загрузки цепей, предназначенные для использования именно в таких цепях. В этих наборах инструментов имеется широкий выбор инструментов для загрузки цепей для других целей.
дальнейшее чтение
источник
Есть такая популярная программа. Она называется ... держать на стуле ... барабанная дробь ...
env
. Версия GNU, начиная с версии 8.28, а не POSIX, имеет-C
опцию, которая позволяет вам установить каталог так, как вам нужно:источник
Некоторые программы имеют такую возможность, например, Git:
и сделать:
и Tar:
источник
myProgram
такая возможность не предоставляется ... Спасибо за ваш вклад, но я боюсь, что он вообще не отвечает на мой вопрос.