GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Posix-Methode zum Festlegen des nullten Arguments einer Zielanwendung?

In bash Sie können exec -a verwenden und in zsh Sie können alternativ auch ARGV0 setzen um ein Programm mit einem bestimmten nullten Argument auszuführen, aber gibt es dafür auch eine POSIX-Methode?

Wie in diesem einen Kommentar vorgeschlagen, könnten Sie einen (vorübergehenden) symbolischen Link erstellen, um dies zu erreichen, aber auf diese Weise konnte ich den neuen nullten Argumentwert nicht auf wirklich einen beliebigen Wert setzen, z. den Befehl mit einem bestimmten absoluten Pfad. Gibt es also eine andere Lösung?

Akzeptierte Antwort:

Nein, es gibt keinen POSIX-Weg, außer ein C-Programm zu kompilieren, das dies tut. Als Quick and Dirty:

$ 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 wird von ksh93 unterstützt , bash , zsh , busybox ash (seit Version 1.27.0), yash , mksh (seit Version r50e), die Schily Bourne Shell (seit August 2015) also die am weitesten verbreitete unter den Shells.

Am portabelsten wäre es wahrscheinlich, auf perl zurückzugreifen der wahrscheinlicher verfügbar ist als ein C-Compiler.

$ 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. Möglichkeit, eine Datei direkt zu ändern?

  2. Haben wir ein Undo in Linux?

  3. Der tragbare (posix) Weg zur Prozesssubstitution?

  4. Posix-Programmierhandbuch vs. Linux-Programmierhandbuch?

  5. Welche Bash wird ausgeführt?

Snap-Anwendungsberechtigungen

Eine großartige Möglichkeit, Ihre Daten in Ubuntu Linux zu sichern

Festlegen des Hostnamens in Docker Compose

Was ist der beste Weg, um eine binäre Anwendung für Linux zu verteilen?

Titel der Qt-Anwendung

Gibt es eine Möglichkeit, den Ausführungsbaum von systemd anzuzeigen?