Заставка оболочки Linux показывать последнее возвращаемое значение

12

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

Мой собственный компьютер не имеет этого, как я могу настроить это?
Я использую Xubunto, если нужно больше подробностей, дайте мне знать - я не большой пользователь Linux (я не знаю, что здесь уместно).

пример

Эран
источник
Это слишком расплывчато, чтобы ответить. Какие эти команды вы выполняете? На каком компьютере (ОС) этого нет?
Крис Тинг
Я сказал, что моя ОС - это Xubuntu, и это не связано с какой-либо конкретной командой, это просто то, что всегда показывают.
Эран

Ответы:

10

Кажется, bashэто оболочка Xubuntu по умолчанию .

Отредактируйте .bashrcили .bash_profile(в зависимости от конфигурации вашей системы) и найдите строку, начинающуюся с PS1=. Эта строка устанавливает ваше приглашение .

Чтобы добавить возвращаемое значение последней команды, добавьте в эту строку следующее:

`echo -n $?`

так это выглядит, например, следующим образом (мое текущее приглашение упрощенно):

PS1='\u in \w (`echo -n $?`)\n -> \$ '

Это будет выглядеть следующим образом _:

danielbeck in ~ (0)
 -> $ _

Кроме того, вы можете использовать переменную окружения, PROMPT_COMMANDчтобы добавить код возврата к вашему приглашению:

export PROMPT_COMMAND='RET=$?; echo -n "($RET) "'

Это добавит, например, (0)прямо перед вашим, в противном случае, не измененным приглашением.


Вы получаете «счетчик», добавляя \#к вашему приглашению: это номер команды . Более полезным может быть номер истории , который не начинается с 1, но позволяет вам выполнить любую команду, введя восклицательный знак, за которым следует номер истории команды:

984 $ foo
-bash: foo: command not found
985 $ !984
foo
-bash: foo: command not found
986 $ _

После дополнительной игры:

PS1='`RET=$?; if [ $RET != 0 ] ; then echo "rc $?"; fi`\n\u in `pwd`\n#\# !\! \$ '

Это только покажет возвращаемое значение, если оно не равно нулю, на своей собственной строке. Номер команды и номер истории находятся в той же строке, что и команда, которую вы собираетесь ввести:

danielbeck in /Users/danielbeck/Downloads
#1 !984 $ foo
-bash: foo: command not found
rc 127
danielbeck in /Users/danielbeck
#2 !985 $ _
Даниэль Бек
источник
5

Переменная $?содержит код завершения для последней запущенной программы.

ninth:~ sakkaku$ echo Hello World
Hello World
ninth:~ sakkaku$ echo $?
0
ninth:~ sakkaku$ cat asdasd
cat: asdasd: No such file or directory
ninth:~ sakkaku$ echo $?
1

Я думаю, что вы можете получить "количество выполненных команд", используя инкремент

ninth:~ sakkaku$ echo $[numcommands++]
0
ninth:~ sakkaku$ echo $[numcommands++]
1
ninth:~ sakkaku$ echo $[numcommands++]
2
ninth:~ sakkaku$ echo $[numcommands++]
3

Затем вам нужно изменить переменную PS1 / PS2 в вашем .bashrc, чтобы изменить приглашение. Это похоже на достойное руководство (за исключением того, что оно рекомендует изменить / etc / bashrc, я бы просто сделал ~ / .bashrc).

Matt
источник
1
Спасибо, попробую позже, когда буду за своим компьютером и посмотрю, как все пойдет.
Эран
1

К вашему сведению, если вы используете zsh, это еще проще. Эта конструкция: %(?..%F{red}%?%f)означает показывать последний уровень ошибки последней команды красным, если он не равен нулю (нормальный), но если он нормальный, ничего не показывать. Средство построения %(1j.[%j].)показывает текущее количество фоновых заданий в квадратных скобках.

Кит
источник