Dlaczego mój system Linux powtarza każde wpisane polecenie?

55

Korzystam z systemu Ubuntu Linux, a każde wprowadzone polecenie jest wyświetlane w następnym wierszu, a następnie jego wynik. Na przykład:

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!

Pomyślałem, że może to mieć związek z monitem, który wygląda następująco (PS1):

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

ale przeglądanie przewodników online w celu uzyskania sekwencji ucieczki nie przyniosło niczego oczywistego.

Czad
źródło
20
Wygląda również na zalogowanego jako root. Nie rób tego!
Toby Speight
5
Tak, wiem, że przez większość czasu unikam rootowania. Jest to na maszynie wirtualnej w środowisku testowym, w którym wymagane jest rootowanie.
Czad
9
@TobySpeight to hackneyed, rote rote.
rackandboneman
2
@TobySpeight Poważnie, nie pchaj tego jako absolutnej zasady. Powiedz mi, co jest złego w korzystaniu sudo -iz serii poleceń na poziomie administratora? Zwłaszcza gdy coś debuguję?
Duncan X Simpson
2
@TobySpeight, jeśli nie masz czasu na wyjaśnienia, nie udzielaj ogólnej „porady”, która często jest nieprzydatna.
Tim

Odpowiedzi:

89

Wygląda na to, że masz -vustawiony (coś działa set -v).

Aby to odwrócić, uruchom 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.

Zobacz stronę bashpodręcznika (w sekcji „ Polecenia wbudowane powłoki ”), aby uzyskać więcej informacji na temat setwbudowanego polecenia.

Alternatywnie uruchom help setod wewnątrz, bashaby uzyskać bardziej bezpośredni dostęp do tekstu pomocy.

Attie
źródło
11
Tak! Jako nieco wygodniejsza alternatywa dla kopania man bash, możesz również help set.
ravron
5
Legenda ... Czas, który spędziłem na przewijaniu strony bashpodręcznika ... dzięki!
Attie
1
Moje pierwsze polecenie po uruchomieniu basha, którego nie posiadam, to zawsze set -o vi. Błędnie wpisz jako, set -ovia otrzymasz powyższe zachowanie.
Guntram Blohm
co do dlaczego - podejrzewam, że jest pozyskiwany skrypt (tj. „./srciptname” zamiast po prostu „./scriptname”), który następnie kończy działanie przed rozbrojeniem -v, tj. na końcu powinien „set + v”
jmullee
2
BTW, uważam, że jest set -xbardziej przydatny do rejestrowania lub debugowania rzeczy innych niż kontrola przepływu, ponieważ rozszerza zmienne, aby pokazać, jakie polecenia są w rzeczywistości wykonywane, np. echo fooZamiastecho $my_string
Peter Cordes
11

Przynajmniej w Bash 4.3 to polecenie ma podobny efekt jak set -v:

trap 'echo "$BASH_COMMAND"' DEBUG

Aby sprawdzić, czy to Cię dotyczy, uruchom

trap -p DEBUG

Aby go rozbroić, uruchom

trap - DEBUG
wjandrea
źródło