Temos env(1) para modificar o ambiente do comando que queremos executar (por exemplo env MANPAGER=more man dtrace
). Existe algo semelhante, mas para modificar o diretório em que o comando será iniciado?
O ideal seria que ficasse 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 tem a mesma interface que env(1):
cd /new/cwd && myProgram
Além disso, posso 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 algo que já existe (pelo menos no macOS e FreeBSD).
myProgram
não é necessariamente um aplicativo de desktop (nesse caso eu poderia usar apenas a tecla Path em um arquivo .desktop ).
AFAIK, não existe tal utilitário dedicado na caixa de ferramentas POSIX. Mas é comum invocar
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, você pode apenas inline-lo:
(assumindo que o diretório não é
-
). AdicionandoCDPATH=
(caso haja um no ambiente) e-P
para que ele se comporte mais como um straightchdir()
.Alternativamente, você pode usar
perl
whochdir()
faz um diretochdir()
da caixa.Os conjuntos de ferramentas usados no mundo dos daemontools, e em outros lugares, têm isso e muito mais; tiveram por muitos anos; e estão amplamente disponíveis.
runtool
:cd
:chdir
:Todas essas são ferramentas de carregamento de correntes, projetadas para serem usadas exatamente nesses tipos de correntes. Há uma ampla seleção de ferramentas de carregamento de corrente nesses kits de ferramentas para outros fins.
Leitura adicional
Existe um programa tão popular. Chama-se... segure-se na cadeira... rufem os tambores...
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 conforme necessário:Certos programas têm uma opção para isso, como o Git:
e fazer:
e Tar: