2012-04-11 17 views
15

vi un cliente haciendo $bash -x comando para ver si el archivo es ejecutable (o ksh -x de comandos, etc.) como el -x en la declaración if en el script de shell.fiesta -x comando

Mi pregunta es: ¿Qué significa $bash -x comando?

Mi interpretación fue iniciar un comando en un nuevo shell bash dentro del shell actual, heredando las mismas variables de entorno y ejecutado por el mismo usuario.

Lo curioso es que puedo hacer $ls pero no $bash -x ls, que dan:

(bajo AIX 6) /usr/bin/ls: /usr/bin/ls: cannot execute binary file

es un misterio para mí por qué el error es - adivinando que se debe a un privilegio que significa que mi suposición anterior no es correcta.

Además, creo que $bash ls y $bash -x ls es lo mismo (-x para "ejecutar")?

Cualquier comentario es muy apreciado.

¡Salud!

+5

para ejecutar un comando bash con el modo de depuración (-x) habilitado, use 'bash -x -c your_command' – Alex

+1

RTFM! j/k/10char – KurzedMetal

+0

Gracias Alex por la respuesta concisa, bash -x -c ls hace lo que describes. Entonces, "$ bash -x comando para ver si el archivo es ejecutable" es el INCORRECTO entonces :) ¡Muchas gracias! – Khiet

Respuesta

29

La opción -x inicia un shell BASH en modo de depuración. Puede ver todos los detalles de cómo se procesa su comando/script. Es una buena forma de encontrar algunos errores si el script no hace lo que cabría esperar

Y tal como Alex dijo en el comentario anterior. Para ejecutar un comando en BASH, debe usar la opción -c como bash -x -c ls.

Ver man bash o el manual en línea, específicamente las partes en invoking Bash y the set builtin command para más información:

Todas las opciones de un solo carácter se usan con el orden interna set (ver El interna set) se puede utilizar como opciones cuando se invoca el shell

-x Imprima un rastro de comandos simples, para comandos, comandos de casos, comandos de selección y aritmética para comandos y sus argumentos o listas de palabras asociadas después de que se hayan expandido y antes de que se ejecuten. El valor de la variable PS4 se expande y el valor resultante se imprime antes del comando y sus argumentos expandidos.

+0

Gracias Tomas, man for bash no está instalado en nuestra máquina virtual, pero la página de manual en línea realmente lo dice todo; (gracias para todos por una respuesta tan rápida, muy apreciada! – Khiet

+0

@Khiet De nada. Si no tiene un hombre instalado, escriba 'man bash' en Google y el primer enlace suele ser la página de manual :) – user219882

+0

' bash | grep "\ -x" 'me devuelve cero líneas ... pero funciona. –

0
  • bash -x <file> ejecuta el script <file> con trazado de cada comando ejecutado

  • pruebas si <file> ha permisos de ejecución para el usuario actual.

Parece que ha confundido estos dos.