GNU/Linux >> Linux の 問題 >  >> Linux

ターゲットアプリケーションのゼロ番目の引数を設定するPosixの方法は?

bashexec -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でサポートされています 、bashzshbusybox ash (バージョン1.27.0以降)、yashmksh (バージョン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

Linux
  1. ファイルをインプレースで変更する方法は?

  2. Linuxで元に戻すことはできますか?

  3. Rsync〜/ foo Target / fooはRsync〜/ foo / Target / foo /と同じですか?

  1. プロセス置換を実現するためのポータブル(posix)の方法?

  2. PosixプログラマーマニュアルとLinuxプログラマーマニュアル?

  3. どのBashが実行されていますか?

  1. オーバーレイスクロールバーの使用から個々のアプリケーションをブラックリストに登録する方法は?

  2. Linux 用のバイナリ アプリケーションを配布する最良の方法は何ですか?

  3. Node.JS でアプリケーション ルートに関連するファイルを参照する適切な方法