In bash
puoi usare exec -a
e in zsh
in alternativa puoi anche impostare ARGV0
per eseguire un programma con un certo argomento zero, ma esiste anche un modo POSIX per farlo?
Come suggerito in questo commento, potresti creare un collegamento simbolico (temporaneo) per raggiungere questo obiettivo, ma in questo modo non sono riuscito a impostare il nuovo valore dell'argomento zero su qualsiasi valore arbitrario, ad es. il comando con un certo percorso assoluto. Quindi c'è qualche altra soluzione?
Risposta accettata:
No, non esiste un modo POSIX, a parte la compilazione di un programma C che lo faccia. Come veloce e sporco:
$ 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
è supportato da ksh93
, bash
, zsh
, busybox ash
(dalla versione 1.27.0), yash
, mksh
(dalla versione r50e), la Schily Bourne Shell (da agosto 2015) è quindi la più diffusa tra le conchiglie.
Probabilmente la soluzione più portabile sarebbe ricorrere a perl
che è più probabile che sia disponibile di un compilatore 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