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 bash
sonidos 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 bash
lee: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 quebash
va 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í porquebash
detecta cuándo su entrada estándar es una tubería y actúa en consecuencia (a menos que-c
se 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.cat
en mi Kubuntu obedece ambas pautas y lo usaré para demostrar la utilidad de-
y--
.Deje que
foo
exista un archivo llamado . Esto imprimirá el archivo:Deje que
--help
exista un archivo llamado . Esto no imprimirá el archivo:Pero esto imprimirá el archivo llamado
--help
:Esto concatenará el archivo nombrado
--help
con lo que provenga de la entrada estándar:Parece que realmente no lo necesita
--
, porque siempre puede pasar lo./--help
que 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ésbash
en este caso, pero no hace ningún daño.fuente
-
, un requisito poco probable, pero-
/ lo--
hace posible.cat file1 - file2 > file3
.bash -
significa quebash
está 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í,cat
imprimirá 'hola'. ¿Por qué? Porque 'hola' se está enviando al gato|
ycat
está 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