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