Warum wiederholt mein Linux-System jeden Befehl, den ich eingebe?

55

Ich verwende ein Ubuntu Linux-System und jeder Befehl, den ich eingebe, wird in der nächsten Zeile angezeigt, gefolgt von der Ausgabe des Befehls. Zum Beispiel:

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!

Ich dachte, es könnte mit der Eingabeaufforderung zu tun haben, die wie folgt lautet (PS1):

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

Aber das Durchsehen von Online-Handbüchern, um Fluchtsequenzen auszulösen, ergab keine offensichtlichen Ergebnisse.

Tschad
quelle
20
Sie scheinen auch als root angemeldet zu sein. Mach das nicht!
Toby Speight
5
Ja, ich weiß, dass ich Wurzel meistens meide. Dies ist auf einer VM in einer Testumgebung, in der root erforderlich ist.
Chad
9
@TobySpeight das ist abgedroschener Rat.
Rackandboneman
2
@TobySpeight Im Ernst, pushen Sie das nicht als absolute Regel. Sagen Sie mir, was ist falsch sudo -idaran, eine Reihe von Befehlen auf Root-Ebene auszuführen? Vor allem, wenn ich etwas debugge?
Duncan X Simpson
2
@TobySpeight Wenn Sie keine Zeit zum Erklären haben, geben Sie keine pauschalen "Ratschläge", die oft nicht hilfreich sind.
Tim

Antworten:

89

Es sieht so aus, als ob Sie eingestellt haben -v(etwas läuft set -v).

Um dies umzukehren, führen Sie aus 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.

Weitere Informationen zum integrierten Befehl finden Sie in der bashManpage (im Abschnitt " Shell Builtin Commands ") set.

Alternativ können Sie den Hilfetext auch direkt help setvon innen bashaufrufen.

Attie
quelle
11
Ja! Als etwas bequemere Alternative zum Durchgraben können man bashSie auch help set.
Ravron
5
Du Legende ... Die Zeit, die ich damit verbracht habe, in der bashManpage zu scrollen ... danke!
Attie
1
Mein allererster Befehl nach dem Start einer Bash, die ich nicht besitze, ist immer set -o vi. Tippe das als set -oviund du wirst das obige Verhalten bekommen.
Guntram Blohm
Was das Warum betrifft - Ich würde vermuten, dass ein Skript gefunden wird (dh "./srciptname" statt nur "./scriptname"), das dann beendet wird, bevor es -v deaktiviert, dh am Ende sollte es "+ v" setzen
jmullee
2
Übrigens, ich finde set -xes nützlicher, andere Dinge als den Kontrollfluss zu protokollieren oder zu debuggen, weil es Variablen erweitert, um zu zeigen, welche Befehle tatsächlich ausgeführt werden, z. B. echo fooanstelle vonecho $my_string
Peter Cordes
11

Zumindest in Bash 4.3 hat dieser Befehl eine ähnliche Wirkung wie set -v:

trap 'echo "$BASH_COMMAND"' DEBUG

Um zu überprüfen, ob Sie davon betroffen sind, führen Sie aus

trap -p DEBUG

Führen Sie den Befehl aus, um die Einstellung aufzuheben

trap - DEBUG
wjandrea
quelle