Сообщить данные или путь из файла.sh в.csh

Если я включу \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}сворачивает обратную косую черту вот так.

-2
30.11.2020, 10:26
1 ответ

Оба они являются сценариями csh, поэтому вы можете напрямую вызывать b.cshиз a.sh. Для этого используйте source b.csh.

Между прочим, вы понимаете, что, несмотря на название, a.shне sh, а cshскрипт, не так ли...?

0
18.03.2021, 22:46

Теги

Похожие вопросы