GNU/Linux >> Tutoriales Linux >  >> Linux

¿Es Shell Portable para ejecutar un comando en la misma línea después de la asignación de variables?

¿Existe algún estándar que cubra la portabilidad de ejecutar un comando después de la asignación de variables en la misma línea?

APPLE="cider" echo hi

¿Qué tan portátil es algo así? ¿Dónde funcionará y dónde no?

Además:mis scripts de shell comienzan con #!/bin/sh si eso hace alguna diferencia.

Respuesta aceptada:

Siempre y cuando utilice un shell compatible con POSIX, sí.

De la definición POSIX del lenguaje de comandos de shell:(puntos relevantes en negrita)

Un "comando simple" es una secuencia de asignaciones de variables opcionales y redirecciones, en cualquier secuencia, opcionalmente seguidas de palabras y redirecciones, terminadas por un operador de control.

Cuando se requiere ejecutar un comando simple dado (es decir, cuando cualquier construcción condicional como una lista AND-OR o una declaración de caso no ha pasado por alto el comando simple), las siguientes expansiones, asignaciones y redirecciones se realizarán desde el principio del texto del comando hasta el final:

  1. Las palabras que se reconocen como asignaciones variables o las redirecciones de acuerdo con las reglas gramaticales de Shell se guardan para su procesamiento en los pasos 3 y 4.

  2. Se ampliarán las palabras que no sean asignaciones variables o redirecciones. Si quedan campos después de su expansión, el primer campo se considerará el nombre del comando y los campos restantes serán los argumentos del comando.

  3. Las redirecciones se realizarán como se describe en Redirección.

  4. Cada asignación de variable se expandirá para expansión de tilde, expansión de parámetros, sustitución de comandos, expansión aritmética y eliminación de comillas antes de asignar el valor.

En la lista anterior, el orden de los pasos 3 y 4 puede invertirse para el procesamiento de utilidades especiales incorporadas; consulte Utilidades integradas especiales.

Si no resulta ningún nombre de comando, las asignaciones de variables afectarán el entorno de ejecución actual. De lo contrario, las asignaciones de variables se exportarán para el entorno de ejecución del comando y no afectarán al entorno de ejecución actual (excepto para empotrables especiales).

Además, sí #!/bin/sh asuntos. De la definición POSIX de sh :

La utilidad sh es un intérprete de lenguaje de comandos que ejecutará los comandos leídos desde una cadena de línea de comando, la entrada estándar o un archivo específico. La aplicación se asegurará de que los comandos a ejecutar estén expresados ​​en el lenguaje descrito en Shell Command Language .

Así que básicamente dice que sh debe seguir las reglas que cubrimos anteriormente.

Relacionado:¿Se llama este componente de carcasa negra para unir cables?

Entonces, siempre que tenga un sistema operativo compatible con POSIX, está bien.


Linux
  1. ¿Cómo asignar la salida de un comando a una variable de shell?

  2. ¿Ejecutar un comando Sudo, especificando la contraseña en la misma línea?

  3. ¿Cómo instalo un script para que se ejecute en cualquier lugar desde la línea de comandos?

  4. Shell Script, lea en la misma línea después de hacer eco de un mensaje

  5. Ejecute un script de shell desde el comando docker-compose, dentro del contenedor

Ejecute la línea de comandos de Linux en su iPad

Domina la línea de comandos de Linux

Googler:ejecuta búsquedas en Google desde la línea de comandos

¿Cómo puedo ejecutar un comando diferente pero con los mismos argumentos?

¿Línea de comando para volver a la GUI después de Ctrl-Alt-F1?

¿Cómo usar nohup para continuar ejecutando un comando después de que el usuario cierre la sesión?