58

Следующее ведет себя одинаково в Fedora и CentOS.

cd mydirectory

работает.

cd notadirectory

работает (получает ошибку от Bash).

Тем не мение,

cd `

дает мне какую-то подсказку:

>

Ничто из того, что я собирался ввести, не дает никакого ответа, оно просто отправляется на следующую строку, чтобы повторить запрос. Я просто использую CTRL+C, чтобы выйти обратно в мой root@localhost .

Какова цель этого и что можно с этим сделать?

Спасибо!

4 ответа4

125

То, что вы ввели, - это обратный удар - это начало инструкции bash, чтобы оценить, что вы вводите в качестве команды. > Отображается, чтобы показать, что вы все еще вводите команду на следующей строке.

Если вы закроете обратную галочку, вы увидите, что вся команда будет работать. Например

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

Ответ JohnC уже объясняет обратную черту. Но то, что вас также интересует, - это > приглашение. Это приглашение к продолжению, и оно вызывается не только обратным трюком, но и всегда, когда ваша оболочка четко знает, что вы не завершили ввод команды. Самый простой пример - это явное продолжение строки \ в конце строки ввода (что помогает разбить длинный ввод):

$ echo \
> hallo

Обратите внимание, что так же, как PS1 контролирует внешний вид командной строки, вы также можете настроить PS2 для изменения приглашения продолжения, например

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

Есть много причин для продолжения. Одиночный бэкстик неполон, но вы также можете ввести что-то вроде

ls -l `which cp`

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

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

Как ни странно, пропущенная фигурная скобка } после раскрытия переменной ${ также вызывает приглашение продолжения, но завершится неудачей из-за вставленного пробела:

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

Это означает, что ваша команда еще не завершена. Фактически, символ обратной черты ` используется для разделения встроенной команды.

Пример:

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 приводит к выполнению "which cp" и результату этой команды, то есть / bin / cp будет использоваться в качестве аргумента команды ls. Это поведение, однако, не рекомендуется в пользу более явной и удобочитаемой подстановки команд $(cmd).

При наборе cd `Оболочка ожидает, что команда будет выполнена, и будет закрыта с помощью обратной черты.

В случае раскрытия переменной с использованием фигурных скобок оболочка представляет приглашение продолжения, потому что эти фигурные скобки лексически оцениваются перед выполнением расширения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .