Lorsque j'entre un guillemet simple '
dans le terminal, il passe dans un autre mode et les commandes ne s'exécutent pas. Quel est ce mode et quand l'utilisons-nous?
root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#
command-line
bash
manikanta
la source
la source
'
)Réponses:
En effet, le shell demande une commande / expression complète , et pour cette raison affiche la
PS2
chaîne d'invite.De
man bash
:Et un peu avant ça:
Ainsi, comme vous pouvez le deviner à la lecture de la documentation, les shells ont plusieurs invites à des fins différentes. L'
PS1
invite est votreroot@sai:~#
chaîne, qui s'affiche normalement lorsque vous entrez des commandes.>
est l'PS2
invite. Il y en a aussi d'autres:PS3
pourselect
le bloc de commande etPS4
pour le débogage avec laset -x
commande. Dans ce cas, nous sommes plus intéressésPS2
.Il existe de nombreuses façons dont le shell peut afficher l'
PS2
invite (et où l'exécution d'une commande sur une nouvelle ligne peut être nécessaire). La même invite est utilisée lorsque vous effectuez unehere-doc
redirection (où une commande est considérée comme terminée lorsque vous voyez la chaîne de terminaison, dans cet exemple,EOF
):Très souvent, la poursuite d'une longue commande peut être effectuée en ajoutant
\
un saut de ligne immédiat (!), Ce qui provoquera l'apparition de la même invite:Lorsque des canaux, des opérateurs logiques ou des mots clés spéciaux apparaissent sur la ligne de commande avant la nouvelle ligne, la commande est également considérée comme incomplète jusqu'à ce que toutes les instructions finales soient entrées:
Dans votre cas particulier, une citation simple implique une interprétation littérale de ce qui se trouve entre les guillemets simples. Ainsi, comme l'a souligné Zanna, vous entrez une commande composée de retour à la ligne +
ls
+ retour à la ligne. Un tel nom de fichier exécutable est introuvable (et les noms de fichiers de commande doivent généralement être composés uniquement de caractères alphanumériques, plus de traits de soulignement, de tirets et de points). Bien qu'il soit en effet possible d'avoir des noms de fichiers contenant des caractères spéciaux, cela est toujours évité.REMARQUE : un tel comportement, comme illustré dans votre exemple, est spécifique aux shells de type Bourne, y compris
bash
,dash
(sur Ubuntu, il est lié à/bin/sh
)ksh
, etmksh
.csh
et ses dérivés ne se comportent pas de cette manière:Cependant, en mode interactif,
csh
augmentera toujours en?
tant que prompt2 lorsque plus de saisie est requise:Voir également:
la source
What's the difference between <<, <<< and < < in bash?
est hors ligne / incorrect.Le shell n'attend que le devis de clôture. Lorsque vous le saisissez, il fera exactement ce qu'il fait habituellement et tentera d'exécuter la commande entrée.
Les citations empêchent le shell d'interpréter les caractères spéciaux, ce qui signifie que les extensions ne sont pas effectuées. Les guillemets simples suppriment complètement toute interprétation des caractères spéciaux. Normalement, une nouvelle ligne sépare les commandes, mais ici, vous avez inclus les nouvelles lignes dans le cadre de la commande en les citant.
Puisqu'il n'existe aucune commande telle que
<newline>ls<newline>
, elle n'est pas trouvée.la source