56 votes

Quel est le but du cd ` (backtick) ?

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'incitation :

>

Rien de ce que j'ai pensé entrer ne donne de réponse, il passe simplement à la ligne suivante pour demander à nouveau. J'utilise simplement CTRL + C pour retourner à mon root@localhost .

A quoi cela sert-il et que peut-on faire avec ?

Gracias.

123voto

John C Points 1034

Ce que vous avez tapé est un backtick - c'est le début d'une instruction à bash pour évaluer ce que vous tapez comme une commande. Le site > s'affiche pour indiquer que vous êtes toujours en train de saisir la commande sur la ligne suivante.

Si vous fermez le backtick, vous verrez que toute la commande s'exécutera. Par exemple

~$ cd `
> echo /var`
/var$

59voto

Tobias Kienzler Points 4183

La réponse de JohnC explique déjà le backtick. Mais ce que vous vous demandez aussi, c'est le > rapide. Il s'agit d'une invite de continuation, et elle n'est pas seulement déclenchée par un backtick, mais siempre lorsque votre Shell sait clairement que vous n'avez pas fini de saisir 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 aide à diviser les longues entrées) :

$ echo \
> hallo

Notez que, tout comme PS1 contrôle l'apparence de l'invite de commande, vous pouvez également définir les paramètres suivants PS2 pour modifier l'invite de continuation, par exemple

$ export PS2="(cont.) "
$ echo \
(cont.) hallo

Il y a de nombreuses raisons pour que la continuation se produise. Un simple backtick est incomplet, mais vous pourriez aussi entrer quelque chose comme

ls -l `which cp`

dans une seule ligne (remarque : il est recommandé d'utiliser la fonction $( y ) car les parenthèses indiquent clairement où commence et où se termine l'expansion, alors que les apostrophes simples rendent plus difficile de voir où il en manque une. Et l'imbrication...). Autres raisons possibles pour une invite de continuation :

  • a manquant done après while o for
  • a manquant fi après un if
  • a manquant esac après case
  • une parenthèse fermante manquante, par exemple dans les sous-coquilles (cd $HOME; cat .bashrc)
  • une commande manquante après le piping | ainsi que l'exécution conditionnelle || y && (pas & cependant, puisque cela revient à faire tourner la commande en arrière-plan)
  • un guillemet fermant manquant ( ' o " )

Assez curieusement, une accolade manquante } après une expansion variable ${ provoque également une invite de continuation, mais échouera en raison de l'espace inséré :

$ echo ${
> PS2}
bash: ${
PS2}: bad substitution

4voto

blueVector Points 1

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

0voto

Nicole Stevens Points 1

Le backtick commence/finit 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 la commande "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 cependant déprécié, en faveur de la substitution de commande $(cmd), plus explicite et plus lisible.

En tapant cd ` Le Shell s'attend à ce qu'une commande soit exécutée à la suite, et, à être fermée par un backtick.

Dans le cas de l'expansion de variable utilisant des accolades, le Shell présente l'invite de continuation car ces accolades sont évaluées lexicalement avant que l'expansion ne soit faite.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X