Иногда, когда я запускаю команды, он не отображает вывод, поэтому я не уверен, работали они или нет. Возможно ли, чтобы все команды имели обратную связь, если они работали правильно или нет? Или на минимальном уровне для отображения идентификатора обратной связи, который они выполнили (соответственно или нет)
Чтобы проверить, успешно ли выполнена какая-либо команда, вы можете проверить статус возврата, заданный $? предыдущей командой, с помощью:
echo $?
Статус возврата 0 означает, что команда завершена успешно, в то время как ненулевой вывод ( статус возврата ) будет означать, что возникли некоторые проблемы или произошла ошибка, и категория может быть известна из кода ошибки. Коды ошибок Linux / C определены в /usr/include/asm-generic/errno-base.h и /usr/include/asm-generic/errno.h.
Также в bash .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, как показано на рисунке ниже.)
немного demo:
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 делает в своем посте.)
Вы можете изменить свою командную строку, чтобы отобразить зеленый знак галочки, когда предыдущая команда выходит с 0 и красным X в противном случае. В Arch 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\$? ")
Вот как это выглядит:
6]
Да, вы можете получить обратную связь для каждой команды, которую вы выполнили на терминале. Она работает на основе echo $?, которая возвращает 0 для успешного завершения команды и любое другое значение, отличное от 0 для отказа. [!d0 ]
Чтобы получить обратную связь с успехом или неудачей, добавьте следующую строку в файл ~/.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