Linuxシステムが入力したすべてのコマンドを繰り返すのはなぜですか?


55

Ubuntu Linuxシステムを使用しています。入力したすべてのコマンドは次の行に表示され、その後にコマンドの出力が続きます。例えば:

root@dpkube165:~# ls
ls  <--- why is this here?
Desktop  Documents  Downloads 

root@dpkube165:~# date
date  <--- or this?
Mon Mar 19 11:24:59 EDT 2018

root@dpkube165:~# echo "Hello, world!"
echo "Hello, world!" <--- or this?
Hello, world!

次のようなプロンプト(PS1)に関係しているのではないかと思いました。

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

しかし、エスケープシーケンスを促すためにオンラインガイドを確認しても、明らかな結果は得られませんでした。


20
また、rootとしてログインしているようです。そんなことしないで!
トビー・スペイト

5
はい、ほとんどの場合、ルートを回避することを知っています。これは、rootが必要な使い捨てテスト環境のVM上にあります。
チャド

9
@TobySpeightこれはハックされた、控えめなアドバイスです。
rackandboneman

2
@TobySpeight真剣に、絶対的なルールとしてプッシュしないでください。sudo -i一連のルートレベルのコマンドを実行するのに何が問題なのか教えてください。特に私が何かをデバッグしているときは?
ダンカンXシンプソン

2
@TobySpeightに説明する時間がなければ、しばしば役に立たない「アドバイス」を与えないでください。
ティム

回答:


89

-v設定したように見えます(何かが実行されていますset -v)。

これを逆にするには、を実行しset +vます。

set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
       Without  options, the name and value of each shell variable are displayed in a
       format that can be reused as input for setting or resetting the currently-set
       variables. Read-only variables cannot be reset. In posix mode, only shell
       variables are  listed. The output is sorted according to the current locale.
       When options are specified, they set or unset shell attributes. Any arguments
       remaining after option processing are treated as values for the positional
       parameters and are assigned, in order, to $1, $2, ...  $n.  Options, if
       specified, have the following meanings:

[...]

-v      Print shell input lines as they are read.

組み込みコマンドの詳細については、bashマンページ(「シェル組み込みコマンド」セクションの下)を参照してくださいset

または、ヘルプテキストに直接アクセスするには、help set内部から実行しbashます。


11
うん!掘り下げるための少し便利な代替手段としてman bash、あなたもできますhelp set
ラヴロン

5
あなたの伝説...私がbashマンページでスクロールするのに費やした時間...ありがとう!
Attie

1
私が所有していないbashを始めた後の私の最初のコマンドはいつもset -o viです。それを間違って入力するset -oviと、上記の動作が得られます。
ガントラムブローム

理由として-私が調達されているスクリプトがあります疑いがあるでしょう、それは-vの設定を解除する前にして終了(「./srciptnameは、」IEだけではなく、「./scriptname」の)、すなわち最後にそれが『+ Vを設定する』必要があります
jmullee

2
ところで、私は見つけるset -xそれはコマンドが何であるかを示すために、変数を展開しているため、ロギング、または制御フロー以外のもののデバッグのためのより有用実際に実行されて例えば、echo foo代わりにecho $my_string
ピーター・コルド

11

少なくともBash 4.3では、このコマンドの効果はset -v次のとおりです。

trap 'echo "$BASH_COMMAND"' DEBUG

これが自分に影響するかどうかを確認するには、実行します

trap -p DEBUG

設定を解除するには、実行します

trap - DEBUG
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.