Pregunta

¿Cuál es la diferencia entre los dos comandos siguientes, cuando se ejecuta en AIX?

/bin/sh 'ls -l -R'
/bin/sh -c 'ls -l -R'
¿Fue útil?

Solución

En AIX, incumplimientos /bin/sh a la shell Korn (ksh).

/bin/sh 'ls -l -R'

Con ksh, esto va en la cáscara, diciéndole que se ejecute el script llamado ls -l -R (en el directorio actual o en el camino). Si hay un script se puede encontrar con este nombre, ksh trata el argumento como un comando y lo ejecuta.

Tenga en cuenta que con el golpe, si el guión no se puede encontrar, esto daría lugar a un error.

/bin/sh -c 'ls -l -R'

Así se inicia una nueva instancia de la cáscara, diciéndole que se ejecute el comando ls -l -R.

Otros consejos

(Esto es en respuesta a Phil Ross, pero necesito el formato:)

El uso de una de mis cuentas de Linux:

sh> /bin/sh --version
GNU bash, version 3.2.39(1)-release (i386-redhat-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
sh>  /bin/sh 'ls -l -R'
/bin/sh: ls -l -R: No such file or directory
sh> /bin/sh ls
/bin/ls: /bin/ls: cannot execute binary file
sh> /bin/sh -c 'ls -l | head -1'
total 147296
sh> 

El uso de una de mis instalaciones de Cygwin:

sh> /bin/sh --version
GNU bash, version 3.2.49(23)-release (i686-pc-cygwin)
Copyright (C) 2007 Free Software Foundation, Inc.
sh> /bin/sh 'ls -l -R'
/bin/sh: ls -l -R: No such file or directory
sh> /bin/sh ls
/usr/bin/ls: /usr/bin/ls: cannot execute binary file
sh> /bin/sh -c 'ls -l | head -1'
total 264744
sh> 

Su /bin/sh puede variar, pero esto parece ser el comportamiento adecuado:

  • suministrar un nombre de fichero a / bin / sh lo interpretará como el nombre de archivo de un script de shell y tratar de ejecutarlo
  • -c suministro con un argumento que va a interpretar como un argumento de línea de comandos / bin / sh y tratar de ejecutar ese

Para más detalles, tipo

man sh
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top