1

Почему zsh печатает cmdand для каждого && в начале строки?

Например, когда я вставляю следующие строки в оболочку Z

echo "foo" && echo "bar" && \
echo "buz" && \
echo "jam"

... Zsh будет отображать мне следующее

echo "foo" && echo "bar" && \
cmdand cmdand> echo "buz" && \
cmdand cmdand cmdand> echo "jam"

Таким образом, zsh cmdand для каждого && он столкнулся до этой строки. Я только что заметил, что подобное верно для || и cmdor .

Почему это было бы полезно вообще? Разве это не загромождает консоль? Можно ли контролировать это поведение?

Я наблюдал такое поведение в Mac OS и Ubuntu для версий zsh> 5.x.

1 ответ1

4

Он управляется значением переменной среды PS2 , значение которого по умолчанию '%_> ' задает такое поведение. Его цель - показать, где вы находитесь в многострочной команде (а не только в строках, заканчивающихся обратной косой чертой), например, если вы введете условную команду в несколько строк, вы получите:-

$ if [ "$var" ]
if> then
then> echo var: $var
then> else
else> echo var: not set
else> fi
var: not set
$ 

Оболочка не различает напечатанные и вставленные строки.

Установите PS2='> ' для простого > в каждой строке продолжения.

Для получения дополнительной информации см. Руководство man zshall и выполните поиск PS2 .

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