bash
で exec -a
を使用できます およびzsh
または、ARGV0
を設定することもできます 特定のゼロ番目の引数を使用してプログラムを実行しますが、POSIXの方法もありますか?
この1つのコメントで示唆されているように、これを実現するために(一時的な)シンボリックリンクを作成できますが、この方法では、新しいゼロ番目の引数値を真に任意の値に設定できませんでした。特定の絶対パスを持つコマンド。それで、他の解決策はありますか?
承認された回答:
いいえ、それを実行するCプログラムをコンパイルする以外にPOSIXの方法はありません。迅速で汚いものとして:
$ 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
ksh93
でサポートされています 、bash
、zsh
、busybox ash
(バージョン1.27.0以降)、yash
、mksh
(バージョンr50e以降)、Schily Bourne Shell(2015年8月以降)は、シェルの中で最も普及しています。
おそらく最も移植性の高いのは、perl
に頼ることでしょう。 これは、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