GNU/Linux >> Tutoriels Linux >  >> Linux

À quoi sert l'argument "nom" de "sh -c" ?

Tiré de la page de manuel de FreeBSD sur sh (parce que c'est la plate-forme cible la plus pratique en ligne, c'est Debian si c'est important) :

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

Je suis particulièrement intéressé par le cas d'utilisation de :

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

Exemple :

# 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

J'ai remarqué que le premier argument n'était pas passé à myscript , et la documentation fait allusion à un name paramètre, sur lequel je n'ai pas vu de section doc. Dans mon exemple, j'ai ajouté l'annonce _ à la place de l'argument nom, mais :

Que dois-je remplir pour name ?

Réponse acceptée :

Le formulaire :

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

est appelé script en ligne, souvent associé à find ... -exec sh -c '...' find-sh {} + . Dans le script en ligne, $0 sera défini sur name , et le reste des arguments a été rempli avec [email protected] .

En général, vous devez le définir sur quelque chose de significatif, car il sera utilisé par exemple pour afficher des messages d'erreur :

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

Mais vous pouvez définir name à n'importe quel mot que vous aimez, pour indiquer le nom du script en ligne :

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

Ce comportement est défini par POSIX.


Linux
  1. Nom de la version de Fedora 11 – Votez pour lui

  2. Kali sur le sous-système Windows pour Linux

  3. Kali Linux pour le PDA Gemini

  4. CentOS / RHEL 6 :Comment changer le nom du groupe de volumes pour le périphérique de disque racine

  5. Quelles sont les règles pour les identifiants valides (par exemple, fonctions, vars, etc.) dans Bash ?

GalliumOS :la distribution Linux pour les Chromebooks

Slack pour la CLI – Slack

Comprendre la boucle for dans les scripts shell

La boucle Bash FOR expliquée et simplifiée

Quelle est la meilleure façon de distribuer une application binaire pour Linux ?

Comment attribuer un nom à un écran ?