#shell #terminal #fish
#оболочка #терминал #рыба
Вопрос:
Иногда, когда я работаю на своем терминале, [SIGINT]
появляется перед моей кареткой.
- Что это значит?
- Почему ввод
ls
удаляет этот маркер?
Окружающая среда
Я использую Ubuntu 20.04, работающий fish
как моя оболочка.
Ответ №1:
Это означает, что последнее, что вы запустили, было прервано при получении сигнала SIGINT, что обычно происходит при нажатии ctrl-c.
Запуск ls
удаляет его, потому что ls просто выполняется до завершения, так что теперь последняя вещь не была убита сигналом.
Приглашение Fish по умолчанию показывает эту информацию, потому что это полезно, например, если программа потерпела крах, она покажет SIGABRT или что-то подобное.
Чтобы удалить его, вы можете выбрать приглашение, в котором его нет, из примеров с помощью fish_config
или создать свое собственное, изменив fish_prompt
функцию, например, через
funced fish_prompt
# try it out, once you are happy run
funcsave fish_prompt
Ответ №2:
Если бы это было так bash
, я бы сказал, что кто-то настроил bash
функцию для запуска при генерации вашего приглашения. Вы можете делать всевозможные замечательные вещи с PS1
переменной окружения. Однако, как вы заявляете, вы используете fish
в качестве своей оболочки, поэтому это не PS1
переменная среды.
Это кажется стандартным поведением в fish
, по крайней мере, в неизмененном Ubuntu 20.04
виде, о чем свидетельствует следующая расшифровка, где я CTRL-C sleep
командую:
pax@paxbox ~> sleep 3600 # will ctrl-c this.
^C
pax@paxbox ~ [SIGINT]> true # successful exit.
pax@paxbox ~> false # failed exit.
pax@paxbox ~ [1]>
pax@paxbox ~ [1]> fish -c 'exit 42' # arbitrary exit value.
pax@paxbox ~ [42]>
И вы можете увидеть, почему это происходит, посмотрев на вывод functions fish_prompt
, поскольку это функция, которая вызывается для генерации подсказок в этой оболочке:
# Defined in /usr/share/fish/functions/fish_prompt.fish @ line 4
function fish_prompt --description 'Write out the prompt'
set -l last_pipestatus $pipestatus
set -l normal (set_color normal)
# Color the prompt differently when we're root
set -l color_cwd $fish_color_cwd
set -l prefix
set -l suffix '>'
if contains -- $USER root toor
if set -q fish_color_cwd_root
set color_cwd $fish_color_cwd_root
end
set suffix '#'
end
# If we're running via SSH, change the host color.
set -l color_host $fish_color_host
if set -q SSH_TTY
set color_host $fish_color_host_remote
end
# Write pipestatus
set -l prompt_status (__fish_print_pipestatus " [" "]" "|" (set_color $fish_color_status) (set_color --bold $fish_color_status) $last_pipestatus)
echo -n -s (set_color $fish_color_user) "$USER" $normal @ (set_color $color_host) (prompt_hostname) $normal ' ' (set_color $color_cwd) (prompt_pwd) $normal (fish_vcs_prompt) $normal $prompt_status $suffix " "
end
Строка в конце, настройка prompt_status
, добавляется [SIGINT]
к выводимому приглашению, когда последняя команда была прервана (или добавляется любой ненулевой код выхода для нормального завершения).
Если вы хотите изменить поведение этой функции, вы можете создать свою собственную копию:
mkdir -p ~/.config/fish/functions
function fish_prompt >? ~/.config/fish/functions/fish_prompt.fish
затем внесите любые изменения, которые вы пожелаете.
Комментарии:
1. Убедительное объяснение! Спасибо, что разбили то, что сделал fish_prompt, и ссылаетесь на фактический источник.