Иногда, когда я выполняю команды, это не отображает вывод, таким образом, я не уверен, работали ли они или нет. Действительно ли возможно заставить все команды иметь обратную связь, если они имеют, работал правильно или нет? Или в абсолютном минимуме для отображения идентификатора обратной связи они имеют, работал (correcly или не)
(Я думаю, так как Вы отправляете, внутри Спрашивают Ubuntu, мы можем предположить, что Вы говорите об оболочке по умолчанию, то есть, Bash.)
Существует очень хороший ответ в вопросе о Переполнении стека В сценарии оболочки: повторите команды оболочки, поскольку они выполняются (это не просто определенное для Ubuntu решение).
То, что необходимо сделать, использовать команду набора для превращения подробным или xtrace на.
set -o
даст Вам, список которых текущие параметры переключаются на на или прочь.
set -v
или подробная версия:
set -o verbose
станет подробным НА.
Я думаю, что Вы хотите, тем не менее, на самом деле xtrace. Это не только повторит каждую команду, которую Вы выполняете, она также развернет параметры и даст Вам больше обратной связи. Таким образом, если я сделаю что-то столь же глупое как вводящий 'привет' на терминале, то я получу эхо того, что я ввел, а также отчет/трассировка о том, что оболочка сделала, чтобы попытаться выполнить команду 'привет' (см. снимок экрана ниже):
Включить xtrace:
set -x
или:
set -o xtrace
Для отключения этих параметров Вы (парадоксально) называете те же команды кроме с плюс символ + вместо тире или минус символ, таким образом, например:
set +v
станет подробным ПРОЧЬ, так же:
set +x
выключит xtrace.
Подробное руководство на опциях оболочки находится в Главе 33. Опции, Усовершенствованное Руководство по созданию сценариев Bash.
Чтобы проверить, работала ли некоторая команда успешно или нет, можно проверить статус возврата, данный $?
, из предыдущей команды с:
echo $?
Статус возврата 0
означает команду, завершенную с успешно, в то время как ненулевой вывод (код ошибки) означал бы, что с некоторыми проблемами встретились или существует ошибка, и категория может быть известна из кода ошибки. Коды ошибок Linux/C определяются в /usr/include/asm-generic/errno-base.h
и /usr/include/asm-generic/errno.h
.
Также в ударе, .bashrc
определяет псевдоним alert
который может использоваться для уведомления с состоянием завершения. Необходимо было бы присоединить псевдоним с комбинацией команды или команды как это:
some_command --some-switch; alert
Можно добавить следующую строку кода к Вашему ~/.bashrc
файл для отображения статуса возврата последней выполняемой команды..
# show the return code of last command executed PS1='${debian_chroot:+($debian_chroot)}\u@\h(lst ret. $(echo $?) ):\w\$ '
(откройте файл ~/.bashrc
с текстовым редактором по Вашему выбору и копией вышеупомянутая строка, вставьте его в файле и сохраните. Запустите новый экземпляр терминала, и у Вас должен быть он в действии. Или вместо этого Вы могли определить некоторую функцию и использовать ее с PS1
как подобный, проиллюстрированный ниже.)
немного демонстрации:
hash@precise(lst ret. 0 ):~$ ls -sh someFileThatsNotThere
ls: cannot access someFileThatsNotThere: No such file or directory
hash@precise(lst ret. 2 ):~$
hash@precise(lst ret. 2 ):~$ aCommandThatsNot
aCommandThatsNot: command not found
hash@precise(lst ret. 127 ):~$
hash@precise(lst ret. 127 ):~$ echo "you should get a lst ret. 0, I believe the system has echo installed :)"
you should get a lst ret. 0, I believe the system has echo installed :)
hash@precise(lst ret. 0 ):~$
hash@precise(lst ret. 0 ):~$ sudo touch /tmp/someTestFile
[sudo] password for hash:
hash@precise(lst ret. 1 ):~$
hash@precise(lst ret. 1 ):~$ chown $USER:$USER /tmp/someTestFile
chown: changing ownership of `/tmp/someTestFile': Operation not permitted
Просто проигрывание с PS1
:).. немного больше,
function showRetStat { ## line1: initiliazing retStat with the return status of the previous command retStat=$? ## line2: Left padding the return status with spaces. If you prefer the unpadded one, you can just replace # $retStatFtd in the lines initializing noErrStr and errStr among other possible ways. retStatFtd=$(sed -e :a -e 's/^.\{1,2\}$/ &/;ta' <<< $retStat) ## lines3&4: Setting the strings to display for a successful and unsuccessful run of previous command # which we are going to display with the prompt string. Change the strings to display text of your # choice like you may set noErrStr="yippie!" , errStr="oopsie!" in place of what they're now. noErrStr="retStat "$retStatFtd" :: PASS ^_^" errStr="retStat "$retStatFtd" :: FAIL x_x" ## line5: Applying the logic and display the proper string at the prompt. Space padded number i.e. retStatFtd, here, # worked in the logic, originally I intended to use this for the display while retStat in the conditional # check; you could make the function one statement less if you want to. echo "$([ $retStatFtd = 0 ] && echo "$noErrStr" || echo "$errStr")" } ## Combining the function showRetStat into the prompt string. PS1='${debian_chroot:+($debian_chroot)}\u@\h($(showRetStat)):\w\$ '
(можно изменить функцию для создания этого более необычным, что-то как @gronostaj делает в его сообщении.)
Да , возможно получить обратную связь для каждой команды, которую Вы выполнили на терминале. Это работает на основе echo $?
, который возвращается 0 для успешного завершения команды и любого другого значения кроме 0 для отказа.
Для получения обратной связи успешности или неуспешности добавьте ниже строки к ~/.bashrc
файл.
bind 'RETURN: ";if [[ $? == 0 ]]; then tput setaf 6 && echo SUCCESS; tput sgr0; else tput setaf 1 && echo FAILURE; tput sgr0; fi;\n"'
И затем источник ~/.bashrc
файл, чтобы заставить его работать.
source ~/.bashrc
Объяснение:
Для каждой команды Вы выполнились на терминале, этот ;if [[ $? == 0 ]]; then tput setaf 6 && echo SUCCESS; tput sgr0; else tput setaf 1 && echo FAILURE; tput sgr0; fi;
, код будет автоматически , добираются, связывают с ним.
Пример:
$ sudo apt-cache policy firefox;if [[ $? == 0 ]]; then tput setaf 6 && echo SUCCESS; tput sgr0; else tput setaf 1 && echo FAILURE; tput sgr0; fi;
firefox:
Installed: 24.0+build1-0ubuntu1
Candidate: 24.0+build1-0ubuntu1
Version table:
*** 24.0+build1-0ubuntu1 0
500 http://ubuntu.inode.at/ubuntu/ saucy/main amd64 Packages
100 /var/lib/dpkg/status
SUCCESS
$ suda apt-get update;if [[ $? == 0 ]]; then tput setaf 6 && echo SUCCESS; tput sgr0; else tput setaf 1 && echo FAILURE; tput sgr0; fi;
No command 'suda' found, did you mean:
Command 'sudo' from package 'sudo-ldap' (universe)
Command 'sudo' from package 'sudo' (main)
suda: command not found
FAILURE
Можно изменить командную строку для отображения зеленого знака галочки, когда предыдущая команда выходит с 0 и красный X иначе. дуга Linux Wiki имеет некоторую хорошую часть кода для добавления к Вашему bash.rc
:
set_prompt () {
Last_Command=$? # Must come first!
Blue='\[\e[01;34m\]'
White='\[\e[01;37m\]'
Red='\[\e[01;31m\]'
Green='\[\e[01;32m\]'
Reset='\[\e[00m\]'
FancyX='\342\234\227'
Checkmark='\342\234\223'
# Add a bright white exit status for the last command
#PS1="$White\$? "
# If it was successful, print a green check mark. Otherwise, print
# a red X.
if [[ $Last_Command == 0 ]]; then
PS1+="$Green$Checkmark "
else
PS1+="$Red$FancyX "
fi
# If root, just print the host in red. Otherwise, print the current user
# and host in green.
if [[ $EUID == 0 ]]; then
PS1+="$Red\\h "
else
PS1+="$Green\\u@\\h "
fi
# Print the working directory and prompt marker in blue, and reset
# the text color to the default.
PS1+="$Blue\\w \\\$Reset "
}
PROMPT_COMMAND='set_prompt'
(я отключил фактический код ошибки, потому что мне не нравится он, если требуется видеть точные коды просто удалить #
из этой строки: #PS1="$White\$? "
)
Вот то, как это смотрит: