Di bash
anda dapat menggunakan exec -a
dan di zsh
Anda juga dapat mengatur ARGV0
untuk menjalankan program dengan argumen ke-nol tertentu, tetapi apakah ada cara POSIX untuk melakukannya?
Seperti yang disarankan dalam satu komentar ini, Anda dapat membuat tautan simbolis (sementara) untuk mencapai ini, tetapi dengan cara ini saya tidak dapat menetapkan nilai argumen ke-nol yang baru ke nilai sembarang, mis. perintah dengan jalur absolut tertentu. Jadi apakah ada solusi lain?
Jawaban yang Diterima:
Tidak, tidak ada cara POSIX, selain mengkompilasi program C yang melakukannya. Sebagai yang cepat dan kotor:
$ echo 'int main(int c,char*v[]){
execvp(v[1],&v[2]);perror(v[1]);return 127;}'>r.c && make r
$ ./r ps zzz -f
UID PID PPID C STIME TTY TIME CMD
chazelas 7412 7411 0 10:44 pts/4 00:00:00 /bin/zsh
chazelas 21187 7412 0 22:33 pts/4 00:00:00 zzz -f
exec -a
didukung oleh ksh93
, bash
, zsh
, busybox ash
(sejak versi 1.27.0), yash
, mksh
(sejak versi r50e), Schily Bourne Shell (sejak Agustus 2015) jadi yang paling tersebar luas di antara shell.
Mungkin yang paling portabel adalah menggunakan perl
yang lebih mungkin tersedia daripada kompiler C.
$ perl -e 'exec {shift} @ARGV' ps zzz -f
UID PID PPID C STIME TTY TIME CMD
chazelas 7554 7411 0 10:58 pts/12 00:00:00 /bin/zsh
chazelas 7630 7554 0 11:02 pts/12 00:00:00 zzz -f