GNU/Linux >> Znalost Linux >  >> Linux

Posix způsob nastavení nulového argumentu cílové aplikace?

V bash můžete použít exec -a a v zsh alternativně můžete také nastavit ARGV0 spustit program s určitým nultým argumentem, ale existuje také způsob POSIX, jak to udělat?

Jak je navrženo v tomto jednom komentáři, můžete vytvořit (dočasný) symbolický odkaz, abyste toho dosáhli, ale tímto způsobem jsem nemohl nastavit hodnotu nového nultého argumentu na skutečně jakoukoli libovolnou hodnotu, např. příkaz s určitou absolutní cestou. Existuje tedy nějaké jiné řešení?

Přijatá odpověď:

Ne, neexistuje žádný způsob POSIX, kromě kompilace programu C, který to dělá. Jako rychlý a špinavý:

$ 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 je podporován ksh93 , bash , zsh , busybox ash (od verze 1.27.0), yash , mksh (od verze r50e), Schily Bourne Shell (od srpna 2015) je tak nejrozšířenější mezi mušlemi.

Pravděpodobně nejpřenosnější by bylo uchýlit se k perl který je pravděpodobněji dostupný než kompilátor 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. Máme v Linuxu možnost vrátit zpět?

  2. Je Rsync ~/foo Target/foo stejný jako Rsync ~/foo/ Target/foo/?

  3. Přenosný (posix) způsob, jak dosáhnout substituce procesu?

  1. Nastavení názvu hostitele v Docker Compose

  2. Jaký je nejlepší způsob distribuce binární aplikace pro Linux?

  3. Nejlepší způsob, jak přidat podporu SNMP do vaší vlastní aplikace v Debianu

  1. Jak upravit soubor na místě?

  2. Správný způsob odkazování na soubory vzhledem ke kořenovému adresáři aplikace v Node.JS

  3. Získejte snímek obrazovky aplikace EGL DRM/KMS