En este tutorial necesitamos ejecutar el siguiente comando:
# curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
¿Qué significa el último -(guión) después bash?
He visto muchos comandos con esto, y no pude encontrar una explicación lógica y tampoco encontrar la forma de reformular una búsqueda en Google. ¿Es la salida del comando canalizado?
linux
command-line
bash
pipe
Omar BISTAMI
fuente
fuente

sudo bashsonidos realmente aterrador. Intente buscar un tutorial que no fomente tales prácticas.symbolhound.com.Respuestas:
Bash se comporta de una manera algo no estándar cuando se trata de
-.POSIX dice:
Y
Pero luego
man 1 bashlee:Entonces, para Bash
-no significa entrada estándar ni un archivo, por lo tanto, algo no estándar.Ahora tu caso particular:
Yo sospecho que el autor de este comando no se dan cuenta
-es equivalente a--en este caso. Yo sospecho que el autor quería asegurarse de quebashva a leer desde la entrada estándar, que esperaban-al trabajo de acuerdo con la directriz 13.Pero incluso si funcionara de acuerdo con la directriz,
-sería innecesario aquí porquebashdetecta cuándo su entrada estándar es una tubería y actúa en consecuencia (a menos que-cse indique, etc.).Sin embargo
-, no funciona de acuerdo con la directriz, funciona como--. Todavía--es innecesario aquí porque no hay argumentos después.En mi opinión, el último
-no cambia nada. El comando funcionaría sin él.Para ver cómo
--y-puede ser útil en general, estudie el siguiente ejemplo.caten mi Kubuntu obedece ambas pautas y lo usaré para demostrar la utilidad de-y--.Deje que
fooexista un archivo llamado . Esto imprimirá el archivo:Deje que
--helpexista un archivo llamado . Esto no imprimirá el archivo:Pero esto imprimirá el archivo llamado
--help:Esto concatenará el archivo nombrado
--helpcon lo que provenga de la entrada estándar:Parece que realmente no lo necesita
--, porque siempre puede pasar lo./--helpque seguramente se interpretará como un archivo. Pero consideracuando no sabes de antemano cuál es el contenido de la variable. No puede simplemente anteponerse
./a él, porque puede ser un camino absoluto y./lo rompería. Por otro lado, puede ser un archivo llamado--help(porque ¿por qué no?). En este caso--es muy útil; Este es un comando mucho más robusto:fuente
En
man bash, al final de las opciones de un solo carácter hay: -Si ha citado el comando completo, no veo ninguna razón para el uso
-despuésbashen este caso, pero no hace ningún daño.fuente
-, un requisito poco probable, pero-/ lo--hace posible.cat file1 - file2 > file3.bash -significa quebashestá esperando stdin. Así que prácticamente bash ejecutará lo que sea devuelto por el comando que está a la izquierda de|Un ejemplo similar pero más fácil sería:
echo hello | cat -aquí,catimprimirá 'hola'. ¿Por qué? Porque 'hola' se está enviando al gato|ycatestá esperando que se le envíe algoAhora separemos todo el comando en dos:
este comando curl devolverá algo que bash puede entender y ejecutar
entonces tenemos una tubería
|que enviará la salida devuelta por el comando curl al lado derecho de la tubería, es decirsudo -E bash -. Finalmentesudo -E bash -, bash está listo para ejecutar cualquier cosa que se le envíefuente