web-dev-qa-db-fra.com

Quel est le but de cd `(backtick)?

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!

58
Mooseman

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$
125
John C

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 manquant
  • une fi manquante après une if
  • une variable esac après case
  • une parenthèse fermante manquante, par ex. dans les sous-shell (cd $HOME; cat .bashrc)
  • une commande manquante après piping | ainsi que l'exécution conditionnelle || et && (pas & cependant, puisque la commande est exécutée en arrière-plan)
  • un devis de clôture manquant (' 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
60
Tobias Kienzler

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
4
Slyx

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.

0
Nicole Stevens