O que esses símbolos em alguns comandos do terminal Linux significam? [fechadas]

12

No AskUbuntu, eu vi alguns comandos ao redor que parecem bastante complicados, com muitos símbolos neles. Para entender melhor como esses comandos são criados, eu gostaria de saber o que os símbolos representam.

Por exemplo:

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

ou ainda mais complicado:

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

Compreendo muito bem que os parâmetros adicionando como -c, --debug, têm certos efeitos sobre o commmand principal. O significado desses termos é encontrado em quase todos os casos nas manpáginas, portanto não é isso que estou procurando.

Por favor, tente na sua resposta definir o que os símbolos fazem especificamente, em vez de explicar os exemplos que eu dei. Isso poderia ser assim:

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

desde já, obrigado

Exeleração-G
fonte
Eu acho que depende do comando -c -Dpoderia significar algo no comando 1 e uma coisa completamente diferente no comando 2.
Uri Herrera
Ei, você mudou o 1º comando? onde está a edição: X
Rinzwind 6/11
Eu mudei o primeiro comentário, porque estava contendo coisas não informativas. Eu gostaria de mostrar exemplos o mais relativo possível. Fiz um comentário de edição na seção apropriada para isso. Obrigado pelo material -c -D, eu entendi. Eu atualizei a pergunta.
Exeleration-G
Relacionado:  Quais são os operadores de controle e redirecionamento do shell?
G-Man diz 'Reinstate Monica'

Respostas:

14

Consulte a seção Manual de Referência do Bash , denominada Operação do Shell e o Guia Avançado de Script de Bash, Capítulo 3 (Caracteres Especiais) .

Refiro-me a eles sempre que preciso aprender algo novo sobre scripts de shell no ubuntu / linux.

Acho que você achará o Capítulo 3 do ABS o mais fácil de navegar para seus propósitos. Todos os símbolos são vistos na extremidade esquerda da página com uma descrição imediatamente abaixo deles.

SaultDon
fonte
Guia Avançado de Bash-Scripting - O Capítulo 3 é ótimo. Obrigado.
Exeleration-G
A lista no capítulo 3 do guia avançado de scripts do bash está incompleta e parcialmente incorreta. O guia Advanced Bash Scripting não é um bom recurso para o aprendizado do bash. Veja mywiki.wooledge.org/BashGuide e mywiki.wooledge.org/BashFAQ .
precisa saber é o seguinte
@geirha, achei o ABS muito útil, mas para os símbolos em um comando específico, eu gosto de ver as páginas de manual e seus links também são ótimos - marcados como favoritos. Obrigado.
precisa saber é o seguinte
7

Infelizmente, você precisa acessar as páginas de manual, pois os "símbolos" podem ter significados diferentes, dependendo de qual comando os está lendo.

Por exemplo, no seu primeiro comando, o significado de {} e \; depende do comando find (man find). O significado das aspas em um argumento para sed depende de sed ou bash (como é um parâmetro citado, pode ser uma coisa do tipo shell). O ~ / é definitivamente uma coisa de expansão do padrão de bash.

Para o segundo comando complicado, trata-se principalmente de coisas que ecoam, então você encontrará mais informações sobre isso na página de manual do bash.

Para responder seu comentário, os caracteres de redirecionamento> <| são usados ​​para canalizar coisas de e para arquivos (os maiores e menores que sinais) e conectar a saída de um comando à entrada de outra pessoa (o canal |). Veja aqui um bom tutorial sobre redirecionamento de E / S, este é um recurso de design muito poderoso do shell e do conjunto de ferramentas do Unix.

roadmr
fonte
OK, e o que dizer >? É um sinal que também vejo com frequência, pensei que significava "copiar" ou algo assim. Este também depende de um comando?
Exeleração-G
3

A primeira pesquisa por arquivos que terminam em .cdentro do diretório ~/e executes sed(editor de streamline) onde o spesquisador procura cybernetnewse o altera cybernet.

O segundo me escapa ... mostra um resultado vazio quando executado.

Rinzwind
fonte
Provavelmente isso é possível, porque foi tirado de outra pergunta aqui. Sem o contexto, provavelmente não faz nada.
Exeleration-G
2

O melhor recurso que encontrei para aprender comandos de terminal é o LinuxCommand , que fornece descrições detalhadas dos comandos mais usados ​​disponíveis.

Mark Rooney
fonte
link incorreto, atualize ou exclua.
flyingdrifter
2

É difícil dizer o significado completo dos símbolos ao colar comandos complexos.

O eco em particular.

Veja o eco do homem para o -e, ele permite a fuga, então mais tarde é uma fuga.

A maioria dos outros símbolos são manipulações de cordas.

Imagine que você tenha uma variável, i, que contém uma string "foo"

i=foo;echo $i
foo

Mas fica mais complexo se sua variável, $ i, também faz parte de uma string

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

Agora você também pode manipular as cordas, imprimir apenas uma parte

No seu caso

$ {i # * =} = imprime $ i, retira a menor correspondência entre * e =, mas * em si é um curinga.

echo ${i#o}
foo

echo ${i#*o}
o

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

Em seguida, atingimos um sub shell (x ...)

O Bash processará os comandos no sub shell e retornará a saída dos comandos.

x = (uma sub-cadeia de i); continuar

Agora temos um teste, ["$ {! X}"]

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

E aqui é onde eu não posso mais contar.

No bash, $ {! X} será uma string vazia. && == lógico e || é lógico ou

teste {string vazia} AND echo string vazia ou echo x

Você precisaria fornecer mais sintaxe, mas parece que esse eco está canalizando sua saída para algum lugar.

Novamente [] é um teste, e nós escapamos de um [no início.

Então, só posso explicar muito do que o eco está fazendo.

A razão pela qual não há saída quando você insere o comando echo em um terminal é um snipit de código; por padrão, nem x ou i estão definidos, portanto, toda a saída está vazia.

Pantera
fonte
1

Para perguntas sobre símbolos em idiomas específicos, tente o SymbolHound. Você pode pesquisar na web caracteres que o Google não encontra.

Tom
fonte