Temos o env (1) para modificar o ambiente do comando que queremos executar (por exemplo env MANPAGER=more man dtrace
). Existe algo semelhante, exceto para modificar o diretório em que o comando será iniciado?
Idealmente, eu gostaria que fosse assim:
theMagicCommand /new/cwd myProgram
Dessa forma, ele pode ser "encadeado" com outros comandos do tipo env (1), por exemplo,
daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram
Até agora, posso pensar na seguinte solução, que infelizmente não possui a mesma interface que env (1):
cd /new/cwd && myProgram
Além disso, eu posso apenas criar um script de shell simples como este:
#! /bin/sh -
cd "${1:?Missing the new working directory}" || exit 1
shift
exec "${@:?Missing the command to run}"
mas estou procurando por algo que já existe (pelo menos no macOS e no FreeBSD).
myProgram
não é necessariamente um aplicativo de desktop (nesse caso, eu poderia apenas usar a chave Path em um arquivo .desktop ).
cd /new/cwd && env VAR=value myProgram
não atende aos seus critérios?env
. Olhe paraenv
. Compare-artprio
,idprio
,numactl
,jexec
,chrt
, e de fato os comandos nos conjuntos de ferramentas mencionado nas respostas. Existe um padrão e é o carregamento em cadeia.(cd the/cwd; cmd)
?(cd the/cwd; cmd)
para env (1) sem agrupá-lo com sh (1).Respostas:
AFAIK, não existe um utilitário dedicado no baú de ferramentas POSIX. Mas é comum chamar
sh
para configurar um ambiente (cwd, limites, stdout / in / err, umask ...) antes de executar um comando como você faz em seush
script.Mas você não precisa escrever esse script em um arquivo, basta inseri-lo:
(supondo que o diretório não seja
-
). AdicionandoCDPATH=
(no caso de haver um no ambiente) e-P
para que ele se comporte mais como um straightchdir()
.Como alternativa, você pode usar
perl
quemchdir()
faz uma linha retachdir()
fora da caixa.fonte
sh
, também pode fazê-lo(cd /wherever && exec /my/command)
. O()
abre implicitamente um subnível para executar os comandos embrulhadas, e, claro,exec
se livrar do processo de shell extra como rapidamente/my/command
começa a funcionar.Os conjuntos de ferramentas usados no mundo daemontools e em outros lugares têm isso e muito mais; teve por muitos anos; e estão amplamente disponíveis.
runtool
:cd
:chdir
:Todas essas são ferramentas de carregamento de corrente, projetadas para serem usadas exatamente nesse tipo de corrente. Há uma grande variedade de ferramentas de carregamento em cadeia nesses kits de ferramentas para outros fins.
Leitura adicional
fonte
Existe um programa tão popular. Ele é chamado ... hold em sua cadeira ... drumroll ...
env
. A versão GNU, desde a versão 8.28, não POSIX, tem a-C
opção que permite definir o diretório exatamente como você deseja:fonte
Certos programas têm uma opção para isso, como o Git:
e fazer:
e alcatrão:
fonte
myProgram
não oferece essa opção ... Obrigado por sua contribuição, mas receio que ela não responda à minha pergunta.