Ce qui suit se comporte de la même manière 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 pour l'inviter à nouveau. J'utilise simplement CTRL+ Cpour revenir à ma page root@localhost
.
Quel est le but de ceci et que peut-on en faire?
Merci!
>
backtick que sur le backtick, car cela peut également se produire dans d'autres situationsRéponses:
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
>
symbole est affiché 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
la source
cd `dirname \`which ls\``
= cd dans le répertoire où se trouve le binaire "ls". (c'est à direcd /bin
depuis que c'est/bin/ls
) [modifier: ouf, échapper à cette réduction est$()
à``
. Votre exemple (plus la citation correcte) deviendraitcd "$(dirname "$(which ls)")"
beaucoup moins fou.$()
.La réponse de JohnC explique déjà le backtick. Mais vous vous interrogez également sur l'
>
invite. Ceci est une invite de continuation, et elle est non seulement déclenchée par un backtick, mais toujours lorsque votre shell sait clairement que vous n'avez pas fini d'entrer une commande. L'exemple le plus simple consiste à placer une continuation de ligne explicite\
à la fin d'une ligne d'entrée (ce qui permet de fractionner une entrée longue):Notez que, tout comme
PS1
les commandes de l'apparence de l'invite de commande, vous pouvez également définirPS2
une modification de l'invite de continuation, par exemple: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
en une seule ligne (côté Nota: Il est recommandé d'utiliser
$(
et à la)
place, puisque les parenthèses font évident où les rendent plus difficile commence l' expansion et se termine, en un seul contre - apostrophes pour voir où l' on ne manque et l' imbrication ....). Autres raisons possibles pour une invite de continuation:done
aprèswhile
oufor
fi
après unif
esac
aprèscase
(cd $HOME; cat .bashrc)
|
ainsi que l'exécution conditionnelle||
et&&
(pas&
si, puisque c'est juste que la commande s'exécute en arrière-plan)'
ou"
)Curieusement, une accolade manquante
}
après une extension variable${
provoque également une invite de continuation, mais échouera à cause de l'espace inséré:la source
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:
la source
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
entraîne l'exécution de "which cp" et le résultat de cette commande, c'est-à-dire que / 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 pour être suivie, et ê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 la fin du développement.
la source