Wir haben env (1) , um die Umgebung des Befehls zu ändern, den wir ausführen möchten (zum Beispiel env MANPAGER=more man dtrace
). Gibt es etwas Ähnliches, nur um das Verzeichnis zu ändern, in dem der Befehl gestartet werden soll?
Im Idealfall möchte ich, dass es so aussieht:
theMagicCommand /new/cwd myProgram
Auf diese Weise könnte es mit anderen env (1) -ähnlichen Befehlen "verkettet" werden, z.
daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram
Bisher kann ich mir folgende Lösung vorstellen, die leider nicht das gleiche Interface wie env (1) hat:
cd /new/cwd && myProgram
Außerdem kann ich einfach ein einfaches Shell-Skript wie das folgende erstellen:
#! /bin/sh -
cd "${1:?Missing the new working directory}" || exit 1
shift
exec "${@:?Missing the command to run}"
aber ich suche etwas, das es schon gibt (zumindest unter macOS und FreeBSD).
myProgram
ist nicht unbedingt eine Desktop-Anwendung (in diesem Fall könnte ich einfach den Pfadschlüssel in einer .desktop-Datei verwenden ).
cd /new/cwd && env VAR=value myProgram
nicht Ihren Kriterien?env
. Schau malenv
. Vergleichen Sie es mitrtprio
,idprio
,numactl
,jexec
,chrt
, und in der Tat die Befehle in den Toolsets in den Antworten erwähnt. Es gibt ein Muster und es ist Kettenladen.(cd the/cwd; cmd)
?(cd the/cwd; cmd)
zu env (1) übergehen , ohne es mit sh (1) zu umschließen .Antworten:
AFAIK, es gibt kein spezielles Hilfsprogramm in der POSIX-Werkzeugkiste. Es ist jedoch üblich,
sh
eine Umgebung (cwd, limits, stdout / in / err, umask ...) einzurichten, bevor Sie einen Befehl wie in Ihremsh
Skript ausführen .Sie müssen dieses Skript jedoch nicht in eine Datei schreiben, sondern können es einfach einbinden:
(vorausgesetzt, das Verzeichnis ist nicht
-
). HinzufügenCDPATH=
(falls es eine in der Umgebung gibt) und-P
damit es sich eher wie eine Straße verhältchdir()
.Alternativ können Sie verwenden ,
perl
derenchdir()
tut eine geradechdir()
aus dem Kasten heraus .quelle
sh
, können Sie dies auch tun(cd /wherever && exec /my/command)
. Das()
Programm öffnet implizit eine Subshell, um die umschlossenen Befehle auszuführen, und löschtexec
den zusätzlichen Shell-Prozess natürlich so schnell wie möglich/my/command
.Die Toolsets, die in der Welt von daemontools und anderswo verwendet werden, bieten dies und mehr. haben seit vielen Jahren gehabt; und sind weit verbreitet.
runtool
:cd
:chdir
:All dies sind Kettenladewerkzeuge, die für genau diese Arten von Ketten entwickelt wurden. Es gibt eine große Auswahl an Kettenladewerkzeugen in diesen Werkzeugsätzen für andere Zwecke.
Weitere Lektüre
quelle
Es gibt so ein beliebtes Programm. Es heißt ... Halt auf dem Stuhl ... Trommelwirbel ...
env
. Die GNU-Version, seit Version 8.28, nicht POSIX, hat die-C
Option, mit der Sie das Verzeichnis nach Ihren Wünschen einstellen können:quelle
Bestimmte Programme haben eine Option dafür, wie Git:
und mache:
und Teer:
quelle
myProgram
nicht eine solche Option bietet ... Vielen Dank für Ihren Beitrag, aber ich fürchte, es beantwortet meine Frage überhaupt nicht.