Kami memiliki env (1) untuk memodifikasi lingkungan perintah yang ingin kami jalankan (misalnya env MANPAGER=more man dtrace
). Apakah ada sesuatu yang serupa tetapi untuk memodifikasi direktori bahwa perintah akan dimulai?
Idealnya, saya ingin terlihat seperti ini:
theMagicCommand /new/cwd myProgram
Dengan cara ini bisa "dirantai" dengan perintah env (1) lainnya, misalnya,
daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram
Sejauh ini saya dapat memikirkan solusi berikut, yang sayangnya tidak memiliki antarmuka yang sama dengan env (1):
cd /new/cwd && myProgram
Saya juga bisa membuat skrip shell sederhana seperti ini:
#! /bin/sh -
cd "${1:?Missing the new working directory}" || exit 1
shift
exec "${@:?Missing the command to run}"
tapi saya mencari sesuatu yang sudah ada (setidaknya di macOS dan FreeBSD).
myProgram
belum tentu aplikasi desktop (dalam hal ini saya bisa menggunakan kunci Path dalam file .desktop ).
cd /new/cwd && env VAR=value myProgram
tidak memenuhi kriteria Anda?env
. Lihatlahenv
. Bandingkan denganrtprio
,idprio
,numactl
,jexec
,chrt
, dan memang perintah dalam toolsets disebutkan dalam jawaban. Ada sebuah pola, dan itu adalah pemuatan rantai.(cd the/cwd; cmd)
?(cd the/cwd; cmd)
ke env (1) tanpa membungkusnya dengan sh (1).Jawaban:
AFAIK, tidak ada utilitas khusus seperti itu di peti alat POSIX. Tapi itu umum untuk memanggil
sh
untuk mengatur lingkungan (cwd, limit, stdout / in / err, umask ...) sebelum menjalankan perintah seperti yang Anda lakukan dalamsh
skrip Anda .Tetapi Anda tidak harus menulis skrip itu dalam file, Anda bisa langsung menuliskannya:
(dengan asumsi direktori tidak
-
). MenambahkanCDPATH=
(kalau-kalau ada satu di lingkungan) dan-P
untuk itu berperilaku lebih seperti luruschdir()
.Atau, Anda bisa menggunakan
perl
yangchdir()
langsungchdir()
keluar dari kotak.sumber
sh
, Anda juga bisa melakukannya(cd /wherever && exec /my/command)
. Secara()
implisit membuka subkulit untuk menjalankan perintah yang dibungkus, dan tentu saja,exec
menyingkirkan proses shell ekstra secepat/my/command
mulai berjalan.Perangkat yang digunakan di dunia daemontools, dan di tempat lain, memiliki ini dan lebih dari itu; telah bertahun-tahun; dan tersedia secara luas.
runtool
:cd
:chdir
:Semua ini adalah alat pemuat rantai, yang dirancang untuk digunakan dalam rantai yang persis seperti ini. Ada berbagai pilihan alat pemuatan berantai dalam toolkit ini untuk tujuan lain.
Bacaan lebih lanjut
sumber
Ada program yang begitu populer. Hal ini disebut ... terus ke kursi Anda ... drumroll ...
env
. Versi GNU, karena versi 8.28, bukan POSIX, memiliki-C
opsi yang memungkinkan Anda mengatur direktori seperti yang Anda butuhkan:sumber
Beberapa program memiliki opsi untuk ini, seperti Git:
dan membuat:
dan Tar:
sumber
myProgram
tidak memberikan opsi seperti itu ... Terima kasih atas kontribusi Anda tetapi saya khawatir itu tidak menjawab pertanyaan saya sama sekali.