GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es el argumento `name` para `sh -c`?

Tomado de la página del manual de FreeBSD en sh (porque es la plataforma en línea más conveniente, la plataforma de destino es Debian si importa):

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

Estoy particularmente interesado en el caso de uso de:

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

Ejemplo:

# 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

Noté que el primer argumento no se pasó a myscript , y la documentación alude a un name parámetro, en el que no vi una sección de documentación. En mi ejemplo, he agregado el anuncio _ en lugar del argumento del nombre, pero:

¿Qué debo completar para name? ?

Respuesta aceptada:

La forma:

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

se llama script en línea, a menudo se ve en combinación con find ... -exec sh -c '...' find-sh {} + . Dentro del script en línea, $0 se establecerá en name , y el resto de los argumentos se completaron con [email protected] .

En general, debe configurarlo en algo significativo, porque se usará, por ejemplo, para mostrar mensajes de error:

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

Pero puedes configurar name a cualquier palabra que desee, para indicar el nombre del script en línea:

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

Este comportamiento está definido por POSIX.


Linux
  1. 8 consejos para la línea de comandos de Linux

  2. Nombre del lanzamiento de Fedora 11 – Vota por él

  3. Kali Linux para la PDA Gemini

  4. CentOS/RHEL 6:Cómo cambiar el nombre del grupo de volúmenes para el dispositivo de disco raíz

  5. ¿Cuáles son las reglas para los identificadores válidos (por ejemplo, funciones, vars, etc.) en Bash?

GalliumOS:la distribución de Linux para Chromebooks

Slack para la CLI – Slack

¿Qué define el tamaño máximo para un solo argumento de comando?

Linux:¿cuál es el archivo predeterminado para `hostname`?

Comprender el bucle for en los scripts de Shell

El Bash FOR Loop explicado y simplificado