Ce qui suit se comporte de la même façon dans Fedora et CentOS.
cd mydirectory
travaux.
cd notadirectory
fonctionne (obtient une erreur de Bash).
Cependant,
cd `
me donne une sorte d'invite:
>
Rien que je pensais entrer n'apporte de réponse, il se dirige simplement vers la ligne suivante vers Invite à nouveau. J'utilise simplement CTRL+C pour revenir à mon root@localhost
.
Quel est le but de ceci et que peut-on en faire?
Merci!
Ce que vous avez tapé est un backtick - c'est le début d'une instruction à bash pour évaluer ce que vous tapez en tant que commande. Le >
s'affiche pour indiquer que vous entrez toujours la commande sur la ligne suivante.
Si vous fermez le backtick, vous verrez que toute la commande sera exécutée. Par exemple.
~$ cd `
> echo /var`
/var$
La réponse de JohnC explique déjà le backtick. Mais vous vous interrogez également sur l'invite >
. Cette invite de continuation est déclenchée non seulement par un backtick, mais aussi toujours lorsque votre shell sait clairement que vous n'avez pas terminé d'entrer une commande. L'exemple le plus simple est de mettre une continuation de ligne explicite \
à la fin d'une ligne d'entrée (ce qui facilite la division d'une entrée longue):
$ echo \
> hallo
Notez que, tout comme PS1
contrôle l'apparence de la commande, vous pouvez également définir PS2
pour modifier l'invite de continuation, par exemple.
$ export PS2="(cont.) "
$ echo \
(cont.) hallo
Il y a plusieurs raisons pour que la continuation se produise. Un simple coup en arrière est incomplet, mais vous pouvez aussi entrer quelque chose comme
ls -l `which cp`
en une seule ligne (note latérale: Il est recommandé d'utiliser $(
et )
, car les parenthèses indiquent clairement le début et la fin de l'expansion, tandis que les crics simples rendent plus difficile la tâche de voir où il manque. Et imbriquer ...) . Autres raisons possibles pour une suite Invite:
done
après while
ou for
manquantfi
manquante après une if
esac
après case
(cd $HOME; cat .bashrc)
|
ainsi que l'exécution conditionnelle ||
et &&
(pas &
cependant, puisque la commande est exécutée en arrière-plan)'
ou "
)Curieusement, un crochet }
manquant après une extension de variable ${
provoque également une invite de continuation, mais échouera à cause de l'espace inséré:
$ echo ${
> PS2}
bash: ${
PS2}: bad substitution
Cela signifie que votre commande n'est pas encore terminée. En fait, le caractère backtick, `
, est utilisé pour délimiter une commande en ligne.
Exemple:
cd /tmp # Go to /tmp
pwd # Prints the current working directory
ls `pwd` # Lists the content of the current working directory
Le backtick commence/termine la substitution de commande. Le shell lit la commande à l'intérieur des backticks, interprète les résultats et place ces résultats dans la commande. Par exemple:. ls which cp
a pour résultat l'exécution de "which cp" et le résultat de cette commande, c'est-à-dire/bin/cp sera utilisé comme argument de la commande ls. Ce comportement est toutefois déconseillé, en faveur de la substitution plus explicite et lisible de la commande $ (cmd).
Lors de la saisie de cd `, le shell s'attend à ce qu'une commande soit exécutée, puis à être fermée avec un backtick.
Dans le cas du développement variable utilisant des accolades, le shell présente l'invite de continuation, car ces accolades sont évaluées lexicalement avant l'exécution du développement.