12

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

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

пример

3 ответа3

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).

1

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

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