Если я включу \w
в подсказку и cd $'/tmp/new\nline'
, Bash покажет в подсказке только /tmp/newline
. Кажется, что он не печатает буквальную новую строку, но это также не однозначный формат вывода.
${var@P}
предназначен для расширения escape-символов стиля подсказки -, например \u
для имени пользователя, \h
для имени хоста и \w
для рабочего каталога, я сомневаюсь, что вы хотите их здесь. Вместо ${var@Q}
, какие кавычки могут быть более полезными?
Установка PS1='${PWD@Q}\$ '
, я получаю подсказку:$'/tmp/new\nline'$
или '/tmp'$
, если путь лучше. Альтернативой может быть PS1='$(printf "%q" "$PWD")\$ '
, который в некоторых случаях дает другое цитирование, и, например,. оставляет кавычки в случае «хорошего» пути, поэтому /tmp$
.
Чтобы отобразить домашний каталог в виде тильды, один из вариантов — выполнить эту замену вручную:
set_ppath() {
printf -v ppath "%q" "$PWD"
ppath="${ppath/$HOME/"~"}";
}
PROMPT_COMMAND=set_ppath
PS1='$ppath\$ '
Он по-прежнему заключает в кавычки весь путь, если его часть необходимо заключить в кавычки. Чтобы обойти это, я полагаю, вам придется пройти путь по частям.
Я понятия не имею, почему ${var@P}
сворачивает обратную косую черту вот так.
Оба они являются сценариями csh, поэтому вы можете напрямую вызывать b.csh
из a.sh
. Для этого используйте source b.csh
.
Между прочим, вы понимаете, что, несмотря на название, a.sh
не sh
, а csh
скрипт, не так ли...?