GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è l'argomento `name` per `sh -c`?

Tratto dalla pagina man di FreeBSD su sh (perché la piattaforma di destinazione online più conveniente è Debian se è importante):

SH(1)           FreeBSD General Commands Manual          SH(1)

NAME
     sh -- command interpreter (shell)

SYNOPSIS
     sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] [script [arg ...]]
     sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] -c string [name [arg ...]]
     sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] -s [arg ...]
...

Sono particolarmente interessato al caso d'uso di:

sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] -c string [name [arg ...]]

Esempio:

# Normal:
myscript hello world
myscript hello world >/var/log/myscript.combined 2>&1

# Constrained:
#  - Arguments 'hello' and 'world' are suffixed by calling program.
myscript >/var/log/myscript.combined 2>&1 hello world

# Constrained Further:
#  - Wrapped in `sh` to catch system messages, like Segmentation Fault

sh -c 'myscript [email protected]' _ >/var/log/myscript.combined 2>&1 hello world

Ho notato che il primo argomento non è stato passato a myscript e la documentazione allude a un name parametro, su cui non ho visto una sezione doc. Nel mio esempio ho aggiunto l'annuncio _ al posto dell'argomento name, ma:

Cosa devo compilare per name ?

Risposta accettata:

Il modulo:

sh -c '...' name arg1 arg2 ...

si chiama inline-script, spesso visto in combinazione con find ... -exec sh -c '...' find-sh {} + . All'interno dello script inline, $0 sarà impostato su name e il resto degli argomenti è stato compilato in [email protected] .

In generale, dovresti impostarlo su qualcosa di significativo, perché verrà utilizzato ad esempio per mostrare messaggi di errore:

sh -c 'echo "${1?}"' foo
foo: 1: foo: 1: parameter not set

Ma puoi impostare name a qualsiasi parola che ti piace, per indicare il nome di inline-script:

sh -c 'printf "%sn" "$0"' custom-sh 1 2 3
custom-sh

Questo comportamento è definito da POSIX.


Linux
  1. Nome del rilascio di Fedora 11:votalo

  2. Kali sul sottosistema Windows per Linux

  3. Kali Linux per Gemini PDA

  4. CentOS / RHEL 6:come modificare il nome del gruppo di volumi per il dispositivo del disco di root

  5. Nome dell'unità? Qual è il termine corretto per la parte sda ​​di /dev/sda?

8 suggerimenti per la riga di comando di Linux

GalliumOS:la distribuzione Linux per i Chromebook

Slack per la CLI – Slack

Comprendere il ciclo for negli script della shell

Il ciclo Bash FOR spiegato e semplificato

MegaCli:ottieni il nome del dispositivo /dev/sd* per un'unità logica