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

Wozu dient das „Name“-Argument für „sh -c“?

Entnommen aus der Manpage von FreeBSD auf sh (weil es online am bequemsten ist, Zielplattform ist Debian, wenn es darauf ankommt):

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 ...]
...

Ich interessiere mich besonders für den Anwendungsfall von:

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

Beispiel:

# 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

Mir ist aufgefallen, dass das erste Argument nicht an myscript übergeben wurde , und die Dokumentation spielt auf einen name an Parameter, zu dem ich keinen Dokumentabschnitt gesehen habe. In meinem Beispiel habe ich die Anzeige _ hinzugefügt anstelle des Namensarguments, aber:

Was soll ich für name ausfüllen? ?

Akzeptierte Antwort:

Das Formular:

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

heißt Inline-Skript, oft in Kombination mit find ... -exec sh -c '...' find-sh {} + . Innerhalb des Inline-Skripts, $0 wird auf name gesetzt , und die restlichen Argumente wurden in [email protected] eingefügt .

Im Allgemeinen sollten Sie es auf etwas Sinnvolles setzen, da es zum Beispiel zum Anzeigen von Fehlermeldungen verwendet wird:

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

Aber Sie können name festlegen zu einem beliebigen Wort, um den Namen des Inline-Skripts anzugeben:

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

Dieses Verhalten wird von POSIX definiert.


Linux
  1. 8 Tipps für die Linux-Kommandozeile

  2. Was ist der Unterschied zwischen Sudo Su – und Sudo Su –?

  3. Benötigen Sie das „eingebaute“ Eingebaute?

  4. Die LAMPE einschalten:The Clapper für Entwickler

  5. CentOS / RHEL 6:So ändern Sie den Volumengruppennamen für das Root-Festplattengerät

GalliumOS:Die Linux-Distribution für Chromebooks

Slack für die CLI – Slack

Die for-Schleife in Shell-Skripten verstehen

Die Bash FOR-Schleife erklärt und vereinfacht

Wie vergebe ich einen Namen für einen Bildschirm?

Laufwerksname? Wie lautet die korrekte Bezeichnung für den sda-Teil von /dev/sda?