Perché il mio sistema Linux ripete ogni comando che scrivo?


55

Sto usando un sistema Ubuntu Linux e ogni comando che inserisco viene visualizzato nella riga successiva, seguito dall'output del comando. Per esempio:

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!

Ho pensato che potesse avere a che fare con il prompt, che è il seguente (PS1):

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

ma rivedere le guide online per sollecitare sequenze di escape non ha rivelato nulla di ovvio.


20
Sembra anche che tu abbia effettuato l'accesso come root. Non farlo!
Toby Speight,

5
Sì, lo so per evitare il root per la maggior parte del tempo. Questo è su una VM in un ambiente di test usa e getta in cui è richiesto root.
Ciad

9
@TobySpeight questo è hackneyed, consiglio ufficiale.
rackandboneman

2
@TobySpeight Seriamente, non spingerlo come una regola assoluta. Dimmi, cosa c'è che non va nell'uso sudo -iper eseguire una serie di comandi a livello di root? Soprattutto quando eseguo il debug di qualcosa?
Duncan X Simpson,

2
@TobySpeight se non hai tempo per spiegare, non dare un “consiglio” generale che spesso non aiuta.
Tim

Risposte:


89

Sembra che tu abbia -vimpostato (qualcosa è in esecuzione set -v).

Per invertire ciò, eseguire 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.

Vedere la bashmanpage (sotto la sezione " Comandiset integrati Shell ") per maggiori informazioni sul comando integrato.

In alternativa, esegui help setdall'interno bashper un accesso più diretto al testo della guida.


11
Sì! Come alternativa leggermente più comoda per scavare man bash, puoi anche help set.
Ravron,

5
Leggenda ... Il tempo che ho passato a scorrere nella bashmanpage ... grazie!
Attie

1
Il mio primo comando dopo aver avviato una bash che non possiedo è sempre set -o vi. Mistype che as set -ovie otterrai il comportamento sopra.
Guntram Blohm supporta Monica il

per quanto riguarda il motivo per cui - sospetterei che ci sia uno script di provenienza (cioè ". ./srciptname" anziché solo "./scriptname") che quindi esce prima che si disinserisca -v, cioè alla fine dovrebbe "impostare + v"
jmullee

2
A proposito, trovo set -xpiù utile per la registrazione o il debug di cose diverse dal flusso di controllo, perché espande le variabili per mostrare quali comandi vengono effettivamente eseguiti, ad esempio echo fooinvece diecho $my_string
Peter Cordes

11

Almeno su Bash 4.3, questo comando ha un effetto simile a set -v:

trap 'echo "$BASH_COMMAND"' DEBUG

Per verificare se questo ti riguarda, corri

trap -p DEBUG

Per disinserirlo, esegui

trap - DEBUG
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.