¿Qué significan estos símbolos en algunos comandos de terminal de Linux? [cerrado]

12

En AskUbuntu, he visto algunos comandos que parecen bastante complicados, con muchos símbolos en ellos. Para comprender mejor cómo se crean estos comandos, me gustaría saber qué significan los símbolos.

Por ejemplo:

find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

o incluso más complicado:

echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"

Entiendo muy bien que la adición de parámetros como -c, --debug, tener ciertos efectos en el commmand principal. El significado de estos se encuentra en casi todos los casos en las manpáginas, así que eso no es realmente lo que estoy buscando.

Por favor, intente en su respuesta definir qué hacen específicamente los símbolos, en lugar de explicar los ejemplos que di. Eso podría verse así:

" means 'argument': the main command uses anything within these symbols as its source
^ is used for ...
# is used for ...

Gracias por adelantado

Exeleration-G
fuente
Creo que eso depende del comando -c -Dpodría significar algo en el comando 1 y algo completamente diferente en el comando 2.
Uri Herrera
oye, cambiaste el primer comando? ¿Dónde está la edición: X
Rinzwind
Cambié el primer comentario, porque contenía cosas no informativas. Me gustaría mostrar ejemplos que sean lo más relativos posible. Hice un comentario de edición en la sección apropiada para eso. Gracias por el material -c -D, lo entiendo. Actualicé la pregunta.
Exeleration-G
Relacionado:  ¿Cuáles son los operadores de control y redirección de shell?
G-Man dice 'Reincorporar a Monica' el

Respuestas:

14

Consulte la sección El Manual de referencia de Bash denominada Operación de shell y la Guía avanzada de secuencias de comandos de Bash Capítulo 3 (Caracteres especiales) .

Me refiero a aquellos en cualquier momento que necesito aprender algo nuevo sobre las secuencias de comandos de shell en ubuntu / linux.

Creo que encontrará el Capítulo 3 de ABS el más fácil de navegar para sus propósitos. Todos los símbolos se ven en el extremo izquierdo de la página con una descripción inmediatamente debajo de ellos.

SaultDon
fuente
Guía avanzada de secuencias de comandos Bash: el Capítulo 3 es excelente. Gracias.
Exeleration-G
La lista en el capítulo 3 de la guía avanzada de secuencias de comandos bash es incompleta y parcialmente incorrecta. La guía Advanced Bash Scripting no es un buen recurso para aprender bash. Ver mywiki.wooledge.org/BashGuide y mywiki.wooledge.org/BashFAQ en su lugar.
geirha
@geirha Encontré que el ABS es muy útil, pero para los símbolos en un comando específico, me gusta mirar las páginas del manual, y sus enlaces también son geniales. Gracias.
SaultDon
7

Desafortunadamente, debe ir a las páginas del manual, ya que los "símbolos" pueden tener diferentes significados según el comando que los lea.

Por ejemplo, en su primer comando, el significado de {} y \; depende del comando find (man find). El significado de las comillas en un argumento para sed depende de sed o bash (ya que es un parámetro citado, puede ser una cuestión de shell). El ~ / es definitivamente una expansión del patrón bash.

Para el segundo comando complicado, se trata principalmente de cosas que hacen eco, por lo que encontrará la mayoría de la información sobre eso en la página de manual de bash.

Para responder a su comentario, los caracteres de redireccionamiento> <| se utilizan para canalizar cosas desde y hacia archivos (los signos mayores y menores que), y para conectar la salida de un comando con la entrada de otro (la tubería |). Vea aquí un buen tutorial sobre la redirección de E / S, esta es una característica de diseño muy poderosa del conjunto de herramientas y shell de Unix.

roadmr
fuente
OK, y que hay de eso >? Esa es una señal que también veo con frecuencia, pensé que significaba 'copiar' o algo así. ¿Es este también dependiente de un comando?
Exeleration-G
3

El primero busca archivos que terminan .cdesde dentro del directorio ~/y executes sed(editor optimizado) donde sed sbusca cybernetnewsy los cambia cybernet.

El segundo me elude ... muestra un resultado vacío cuando se ejecuta.

Rinzwind
fuente
Es muy probable que sea posible, porque se ha tomado de otra pregunta aquí. Sin el contexto, probablemente no hace nada.
Exeleration-G
2

El mejor recurso que he encontrado para aprender comandos de terminal es LinuxCommand , que proporciona descripciones detalladas de los comandos disponibles más utilizados.

Mark Rooney
fuente
enlace incorrecto, actualice o elimine.
Flyingdrifter
2

Es difícil decirle el significado completo de los símbolos mientras pega comandos complejos.

El eco en particular.

Ver man echo para el -e, permite escapar, por lo que tarde es un escape.

La mayoría de los otros símbolos son manipulaciones de cadenas.

Así que imagina que tienes una variable, i que contiene una cadena "foo"

i=foo;echo $i
foo

Pero se vuelve más complejo si su variable, $ i, también es parte de una cadena

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

Ahora también puede manipular las cadenas, imprimir solo una parte

En tu caso

$ {i # * =} = print $ i, elimina la coincidencia más corta entre * y =, pero * en sí mismo es un comodín.

echo ${i#o}
foo

echo ${i#*o}
o

Ver http://tldp.org/LDP/abs/html/string-manipulation.html

Luego golpeamos un sub shell (x ...)

Bash procesará los comandos en el sub shell y devolverá la salida de los comandos.

x = (una subcadena de i); Seguir

Ahora tenemos una prueba, ["$ {! X}"]

Ver: http://tldp.org/LDP/abs/html/testconstructs.html

Y aquí es donde no puedo decirte más.

En bash, $ {! X} será una cadena vacía. && == lógico y || es lógico o

prueba {cadena vacía} Y echo cadena vacía o echo x

Tendría que dar más sintaxis, pero parece que este eco está canalizando su salida en alguna parte.

Nuevamente [] es una prueba, y escapamos a [al principio.

Así que solo puedo explicar mucho de lo que está haciendo el eco.

La razón por la cual no hay salida cuando ingresa el comando echo en una terminal es que es un fragmento de código, por defecto ni x ni i están definidos, por lo que toda la salida está vacía.

Pantera
fuente
1

Para preguntas sobre símbolos en idiomas específicos, puede probar SymbolHound. Puede buscar en la web caracteres que Google no encuentre.

Tom
fuente