Que signifient ces symboles dans certaines commandes de terminal Linux? [fermé]

12

Sur AskUbuntu, j'ai vu quelques commandes qui semblent assez compliquées, avec beaucoup de symboles. Pour mieux comprendre comment ces commandes sont construites, j'aimerais savoir ce que représentent les symboles.

Par exemple:

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

ou encore plus compliqué:

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

Je comprends très bien que l' ajout de paramètres comme -c, --debugont certains effets sur le commmand principal. La signification de ceux-ci se trouve dans presque tous les cas dans les manpages, donc ce n'est pas vraiment ce que je recherche.

S'il vous plaît, essayez dans votre réponse de définir ce que font spécifiquement les symboles, au lieu d'expliquer les exemples que j'ai donnés. Cela pourrait ressembler à ceci:

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

Merci d'avance

Accélération-G
la source
Je pense que cela dépend de la commande -c -Dpourrait signifier quelque chose dans la commande 1 et une chose complètement différente dans la commande 2.
Uri Herrera
hey tu as changé la 1ère commande? où est le montage: X
Rinzwind
J'ai changé le premier commentaire, car il contenait des informations non informatives. Je voudrais montrer des exemples aussi relatifs que possible. J'ai fait un commentaire d'édition dans la section appropriée pour cela. Merci pour les trucs -c -D, je comprends. J'ai mis à jour la question.
Exeleration-G
En relation:  Quels sont les opérateurs de contrôle et de redirection du shell?
G-Man dit `` Réinstalle Monica ''

Réponses:

14

Reportez-vous à la section du manuel de référence Bash intitulée Shell-Operation et au guide avancé de script Bash, chapitre 3 (caractères spéciaux) .

Je fais référence à ceux-ci chaque fois que j'ai besoin d'apprendre quelque chose de nouveau sur les scripts shell dans ubuntu / linux.

Je pense que vous trouverez le chapitre 3 d'ABS le plus facile à naviguer pour vos besoins. Tous les symboles sont visibles à l'extrême gauche de la page avec une description juste en dessous d'eux.

SaultDon
la source
Guide avancé de Bash-Scripting - Le chapitre 3 est génial. Merci.
Exeleration-G
La liste du chapitre 3 du guide de script bash avancé est incomplète et partiellement erronée. Le guide Advanced Bash Scripting n'est pas une bonne ressource pour apprendre bash. Consultez plutôt mywiki.wooledge.org/BashGuide et mywiki.wooledge.org/BashFAQ .
Geirha
@geirha J'ai trouvé que l'ABS était très utile, mais pour les symboles dans une commande spécifique, j'aime plutôt regarder les pages de manuel, et vos liens sont super aussi - signets. Merci.
SaultDon
7

Malheureusement, vous devez vous rendre sur les pages de manuel, car les "symboles" peuvent avoir des significations différentes selon la commande qui les lit.

Par exemple, dans votre première commande, la signification de {} et \; dépendent de la commande find (man find). La signification des guillemets sur un argument de sed dépend de sed ou bash (car c'est un paramètre cité, il peut potentiellement être une chose shell). Le ~ / est définitivement une extension du modèle bash.

Pour la deuxième commande compliquée, il s'agit principalement d'échos, vous trouverez donc la plupart des informations à ce sujet dans la page de manuel de bash.

Pour répondre à votre commentaire, les caractères de redirection> <| sont utilisés pour diriger des trucs depuis et vers des fichiers (les signes plus et moins que), et pour connecter la sortie d'une commande à une autre entrée (le tuyau |). Voir ici pour un joli tutoriel sur la redirection des E / S, il s'agit d'une fonctionnalité de conception très puissante du shell et du jeu d'outils Unix.

roadmr
la source
OK, et qu'en est-il >? C'est aussi un signe que je vois souvent, je pensais que cela signifiait «copie» ou quelque chose. Est-ce que cela dépend aussi de la commande?
Exeleration-G
3

Le premier recherche les fichiers se terminant à .cpartir du répertoire ~/et executes sed(éditeur de rationalisation) où sed le srecherche cybernetnewset le transforme cybernet.

Le 2ème m'échappe ... montre un résultat vide lorsqu'il est exécuté.

Rinzwind
la source
C'est très probablement possible, car il est tiré d'une autre question ici. Sans le contexte, cela ne fait probablement rien.
Exeleration-G
2

La meilleure ressource que j'ai trouvée pour apprendre les commandes de terminal est LinuxCommand , elle donne des descriptions détaillées des commandes les plus utilisées disponibles.

Mark Rooney
la source
mauvais lien, veuillez mettre à jour ou supprimer.
flyingdrifter
2

Il est difficile de vous donner la pleine signification des symboles lorsque vous collez des commandes complexes.

L'écho en particulier.

Voir l'homme en écho pour le -e, il permet de s'échapper, donc tard \ e est une évasion.

La majorité des autres symboles sont des manipulations de chaînes.

Imaginez donc que vous ayez une variable, i qui contient une chaîne "foo"

i=foo;echo $i
foo

Mais cela devient plus complexe si votre variable, $ i, fait également partie d'une chaîne

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

Maintenant, vous pouvez également manipuler les chaînes, n'imprimer qu'une partie

Dans ton cas

$ {i # * =} = imprimer $ i, Supprimer la correspondance la plus courte entre * et =, mais * lui-même est un caractère générique ..

echo ${i#o}
foo

echo ${i#*o}
o

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

Ensuite, nous avons frappé un sous-shell (x ...)

Bash traitera les commandes dans le sous-shell et retournera la sortie des commandes.

x = (une sous-chaîne de i); continuer

Nous avons maintenant un test, ["$ {! X}"]

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

Et c'est ici que je ne peux pas vous en dire plus.

En bash, $ {! X} va être une chaîne vide. && == logique et || est logique ou

test {chaîne vide} ET écho chaîne vide ou écho x

Vous auriez besoin de donner plus de syntaxe, mais il semble que cet écho envoie sa sortie quelque part.

Encore une fois [] est un test, et nous avons échappé à [au tout début.

Je ne peux donc expliquer qu'une partie de ce que fait l'écho.

La raison pour laquelle il n'y a pas de sortie lorsque vous entrez la commande echo dans un terminal est qu'il s'agit d'un snipit de code, par défaut ni x ni i n'est défini, donc toute la sortie est vide.

Panthère
la source
1

Pour des questions sur les symboles dans des langues spécifiques, vous voudrez peut-être essayer SymbolHound. Vous pouvez rechercher sur le Web des caractères que Google ne trouve pas.

À M
la source