コマンドを実行しても出力が表示されない場合があるため、コマンドが機能したかどうかはわかりません。コマンドが正しく実行されたかどうかにかかわらず、すべてのコマンドにフィードバックを設定することは可能ですか?または、実行したフィードバックIDを表示するための最低限(正確かどうか)
cryptsetupデフォルトで一部のエラーメッセージをスキップできます。$?あなたのにあるのは良いことPS1です。次のステップでは、現在の時刻も追加し、コマンドのタイミングを常に把握します;)
コマンドを実行しても出力が表示されない場合があるため、コマンドが機能したかどうかはわかりません。コマンドが正しく実行されたかどうかにかかわらず、すべてのコマンドにフィードバックを設定することは可能ですか?または、実行したフィードバックIDを表示するための最低限(正確かどうか)
cryptsetupデフォルトで一部のエラーメッセージをスキップできます。$?あなたのにあるのは良いことPS1です。次のステップでは、現在の時刻も追加し、コマンドのタイミングを常に把握します;)
回答:
(Ask Ubuntuに投稿しているので、デフォルトのシェル、つまりBashについて話していると仮定できます。)
Stack Overflowの質問には非常に良い答えがあります。シェルスクリプトの場合:実行されるシェルコマンドをエコーします(これはUbuntu固有のソリューションではありません)。
行う必要があるのは、setコマンドを使用して、verboseまたはxtraceをオンにすることです。
set -o
現在のパラメータがオンまたはオフに切り替えられるリストが表示されます。
set -v
またはlongformバージョン:
set -o verbose
冗長ONになります。
ただし、実際に必要なのはxtraceです。これにより、実行するすべてのコマンドがエコーされるだけでなく、パラメーターが拡張され、より多くのフィードバックが提供されます。したがって、ターミナルで「hi」と入力するのと同じくらいばかげたことをすると、入力した内容のエコーと、シェルがコマンド「hi」を実行しようとしたときのレポート/トレースが表示されます(下のスクリーンショットを参照) ):

xtraceを有効にするには:
set -x
または:
set -o xtrace
これらのパラメーターを無効にするには、ダッシュまたはマイナス記号の代わりにプラス記号+を使用することを除いて、同じコマンドを(反直感的に)呼び出します。たとえば、
set +v
同様に冗長OFFになります:
set +x
xtraceをオフにします。
シェルオプションの詳細なガイドは、第33章「オプション、高度なBashスクリプトガイド」にあります。
whoami >/dev/null。
いくつかのコマンドが正常に機能したかどうかを確認するには、次のコマンドを使用して、前のコマンドのreturnステータスを確認できます$?。
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下図のようにのように。)
ちょっとしたデモ:
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が彼の投稿で行っているように、関数をより凝ったものに変更することができます。)
PS1。最後のコマンドが成功した場合、これはエラーの場合は赤の数、何も余分に、1つのIの使用である:\[\033[01;41;37m\]${?#0}\[\033[00;01;36m\] \u@\h:\w\[\033[00m\]\$
~/.bashrcファイルをソースする必要がないということ ですか?
^_^成功すると幸せになり、x_xそれ以外は赤になります。
前のコマンドが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\$? ")
外観は次のとおりです。


はい、端末で実行したすべてのコマンドのフィードバックを取得することができます。コマンドが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

bind 'RETURN: " && echo SUCCESS || echo FAILED \n"'また、同じことを行います[[ $? == 0 ]]。明示的に確認する必要はありません。