Tenemos env (1) para modificar el entorno del comando que queremos ejecutar (por ejemplo env MANPAGER=more man dtrace
). ¿Hay algo similar pero para modificar el directorio en el que se va a iniciar el comando?
Idealmente, me gustaría que se vea así:
theMagicCommand /new/cwd myProgram
De esta manera, podría "encadenarse" con otros comandos similares a env (1), por ejemplo,
daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram
Hasta ahora puedo pensar en la siguiente solución, que desafortunadamente no tiene la misma interfaz que env (1):
cd /new/cwd && myProgram
Además, puedo crear un script de shell simple como este:
#! /bin/sh -
cd "${1:?Missing the new working directory}" || exit 1
shift
exec "${@:?Missing the command to run}"
pero estoy buscando algo que ya existe (al menos en macOS y FreeBSD).
myProgram
no es necesariamente una aplicación de escritorio (en cuyo caso podría usar la clave Path en un archivo .desktop ).
cd /new/cwd && env VAR=value myProgram
cumple con tus criterios?env
. Miraenv
. Compararlo conrtprio
,idprio
,numactl
,jexec
,chrt
, y de hecho los comandos de los conjuntos de herramientas menciona en las respuestas. Hay un patrón, y se está cargando en cadena.(cd the/cwd; cmd)
?(cd the/cwd; cmd)
a env (1) sin envolverlo con sh (1).Respuestas:
AFAIK, no existe tal utilidad dedicada en el cofre de herramientas POSIX. Pero es común invocar
sh
para configurar un entorno (cwd, límites, stdout / in / err, umask ...) antes de ejecutar un comando como lo hace en sush
script.Pero no tiene que escribir esa secuencia de comandos en un archivo, solo puede insertarla:
(suponiendo que el directorio no lo es
-
). AgregarCDPATH=
(en caso de que haya uno en el entorno) y-P
que se comporte más como una escalerachdir()
.Alternativamente, puede usar
perl
quiénchdir()
hace un directochdir()
de la caja.fuente
sh
, también puedes hacerlo(cd /wherever && exec /my/command)
. La()
implícitamente abre un subnivel para ejecutar los comandos envueltos, y por supuesto,exec
se deshace del proceso de shell adicional tan pronto como/my/command
comienza a funcionar.Los conjuntos de herramientas utilizados en el mundo de daemontools y en otros lugares tienen esto y más; han tenido por muchos años; y están ampliamente disponibles
runtool
:cd
:chdir
:Todas estas son herramientas de carga de cadena, diseñadas para usarse exactamente en este tipo de cadenas. Hay una amplia selección de herramientas de carga en cadena en estos kits de herramientas para otros fines.
Otras lecturas
fuente
Hay un programa tan popular. Se llama ... aferrarse a la silla ... redoble de tambores ...
env
. La versión GNU, desde la versión 8.28, no POSIX, tiene la-C
opción que le permite configurar el directorio tal como lo requiere:fuente
Ciertos programas tienen una opción para esto, como Git:
y hacer:
y alquitrán:
fuente
myProgram
pasa si no ofrece esa opción ... Gracias por su contribución, pero me temo que no responde a mi pregunta en absoluto.