Яке призначення cd `(backtick)?


57

Наступне поводиться так само у Fedora та CentOS.

cd mydirectory

працює.

cd notadirectory

працює (отримує помилку від Bash).

Однак,

cd `

дає мені якусь підказку:

>

Ніщо, про що я думав ввести, не дає жодної відповіді, воно просто переходить до наступного рядка, щоб знову підказати. Я просто використовую CTRL+, Cщоб повернутися до свого root@localhost.

Яка мета цього і що з цим можна зробити?

Дякую!



6
Тож ваше запитання стосується більше, >ніж про те, що стосується бектека, оскільки це може траплятися і в інших ситуаціях
Tobias Kienzler

Відповіді:


124

Те, що ви набрали, - це зворотний відбір - це початок інструкції для башти, щоб оцінити те, що ви вводите як команду. >Відображається вказати , що ви все ще ввести команду на наступному рядку.

Якщо ви закриєте backtick, ви знайдете, що вся команда буде запущена. Напр

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

17
Можна навіть гніздити їх. Для дещо реалістичного прикладу: cd `dirname \`which ls\``= cd до каталогу, де знаходиться двійковий файл "ls". (тобто cd /binз тих пір, як це /bin/ls) [редагувати: ефір, уникаючи того, що відмітка є
ТВОРЧОЮ

54
@MSalters Ви , можливо , натрапив на причину , чому сучасна Баш воліє , $()щоб ``. Ваш приклад (плюс правильне цитування) став би cd "$(dirname "$(which ls)")"набагато менш божевільним.
Мюзер

31
@Muzer Воліє не просто bash, але рекомендується в специфікації POSIX використовувати $()над зворотними котируваннями.
Морська зірка

59

Відповідь JohnC вже пояснює зворотний зв'язок. Але те, що вам теж цікаво - це >підказка. Це підказка продовження, і вона не тільки запускається зворотним відбитком, але завжди, коли ваша оболонка чітко знає, що ви не закінчили введення команди. Найпростіший приклад - це явне продовження рядка \в кінці рядка введення (що допомагає розділити довгий вхід):

$ echo \
> hallo

Зауважте, що так само, як PS1керує зовнішнім виглядом командного рядка, ви також можете встановити PS2зміну запиту продовження, наприклад

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

Є багато причин для продовження. Один backtick є неповним, але ви також можете ввести щось подібне

ls -l `which cp`

в одному рядку (сторона-примітка: рекомендується використовувати, $(а )замість цього, оскільки в дужках стає зрозуміло, де розпочинається і закінчується розширення, тоді як окремі бекстейки ускладнюють побачити, де пропав. І вкладати ...). Інші можливі причини для продовження запиту:

  • відсутній doneпісля whileабоfor
  • зниклий безвісти fiпісляif
  • зниклий безвісти esacпісляcase
  • відсутні дужки, що закриваються, наприклад, в підрозділах (cd $HOME; cat .bashrc)
  • відсутня команда після трубопроводу |, а також умовне виконання ||та &&( &незважаючи на те, що це лише те, що команда працює у фоновому режимі)
  • відсутня заключна пропозиція ( 'або ")

Цікаво, що відсутня дужка }після змінної розширення ${також викликає запит на продовження, але вийде з ладу через вставлений пробіл:

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

2
І те саме відбувається при використанні цитат :)
Стін Шютт

1
Я вже знав відповідь на це запитання, коли побачив його на бічній панелі, але хотів дати вам додатковий, хоч і уявний +1 для дуже приємної глибокої відповіді. Це такий тип контенту, який робить сайти StackExchange приголомшливими. Отже ... Дякую і будьте приголомшливі.
Unkwntech

4

Це означає, що ваша команда ще не завершена. Насправді, backtick символів `, використовується для розмежування вбудованої команди.

Приклад:

cd /tmp # Go to /tmp
pwd # Prints the current working  directory
ls `pwd` # Lists the content of the current working directory

0

Зворотний вибір починає / закінчує заміну команд. Оболонка зчитує команду всередині задників, інтерпретує результати та розміщує ці результати в команді. Напр .: ls which cpпризводить до того, що "який cp" виконується, і результат цієї команди, тобто / bin / cp буде використовуватися як аргумент для команди ls. Однак ця поведінка застаріла на користь більш чіткої та читаної підстановки команд $ (cmd).

Під час введення cd `оболонка очікує, що буде виконана команда, яка буде слідувати, і, щоб вона була близькою із зворотним відбитком.

У разі розширення змінної за допомогою дужок оболонка представляє запит на продовження, оскільки ці дужки оцінюються лексично до того, як буде виконано розширення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.