Mamy env (1), aby zmodyfikować środowisko polecenia, które chcemy uruchomić (na przykład env MANPAGER=more man dtrace
). Czy istnieje coś podobnego do modyfikacji katalogu, w którym polecenie ma zostać uruchomione?
Idealnie chciałbym, aby wyglądało to tak:
theMagicCommand /new/cwd myProgram
W ten sposób można go „powiązać” z innymi poleceniami podobnymi do env (1), np.
daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram
Do tej pory mogę wymyślić następujące rozwiązanie, które niestety nie ma tego samego interfejsu co env (1):
cd /new/cwd && myProgram
Ponadto mogę po prostu utworzyć prosty skrypt powłoki:
#! /bin/sh -
cd "${1:?Missing the new working directory}" || exit 1
shift
exec "${@:?Missing the command to run}"
ale szukam czegoś, co już istnieje (przynajmniej na macOS i FreeBSD).
myProgram
niekoniecznie jest aplikacją komputerową (w takim przypadku mógłbym po prostu użyć klucza Path w pliku .desktop ).
cd /new/cwd && env VAR=value myProgram
nie spełnia twoich kryteriów?env
. Patrzećenv
. Porównaj to dortprio
,idprio
,numactl
,jexec
,chrt
, a nawet poleceń z zestawów narzędzi wymienionych w odpowiedziach. Jest wzór i ładowanie łańcucha.(cd the/cwd; cmd)
?(cd the/cwd; cmd)
do env (1) bez owijania go sh (1).Odpowiedzi:
AFAIK, w skrzynce narzędzi POSIX nie ma takiego dedykowanego narzędzia. Ale często wywołuje
sh
się konfigurację środowiska (cwd, limity, stdout / in / err, umask ...) przed uruchomieniem polecenia, tak jak wsh
skrypcie.Ale nie musisz pisać tego skryptu w pliku, możesz go po prostu wstawić:
(zakładając, że katalog nie jest
-
). DodawanieCDPATH=
(jeśli jest w środowisku) i-P
aby działało bardziej jak stritchdir()
.Alternatywnie możesz użyć,
perl
którychdir()
robi prostochdir()
z pudełka.źródło
sh
, możesz to zrobić(cd /wherever && exec /my/command)
.()
Domyślnie otwiera podpowłoce aby uruchomić zapakowane polecenia, oczywiście,exec
pozbywa dodatkowego procesu powłoki tak szybko jak/my/command
zaczyna biec.Zestawy narzędzi używane w świecie Daemontools i innych miejscach mają to i jeszcze więcej; od wielu lat; i są szeroko dostępne.
runtool
:cd
:chdir
:Wszystkie są narzędziami do ładowania łańcucha, zaprojektowanymi do użycia w dokładnie takich łańcuchach. W tych zestawach narzędzi znajduje się szeroki wybór narzędzi do ładowania łańcucha do innych celów.
Dalsza lektura
źródło
Istnieje tak popularny program. To się nazywa ... trzymać krzesła ... drumroll ...
env
. Wersja GNU, ponieważ wersja 8.28, a nie POSIX, ma-C
opcję, która pozwala ustawić katalog tak, jak potrzebujesz:źródło
Niektóre programy mają taką opcję, na przykład Git:
i zrób:
i smoła:
źródło
myProgram
nie zapewnia takiej możliwości ... Dziękuję za wkład, ale obawiam się, że w ogóle nie odpowiada na moje pytanie.