Почему моя система 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.
Чад
9
@TobySpeight это банально, наизусть совет.
rackandboneman
2
@TobySpeight Серьезно, не выдвигай это как абсолютное правило. Скажите, а что не так с использованием sudo -iсерии команд корневого уровня? Особенно, когда я что-то отлаживаю?
Дункан Х Симпсон
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.

См. bashMan-страницу (в разделе « Командыset встроенной оболочки ») для получения дополнительной информации о встроенной команде.

Либо запустить help setизнутри bashдля более прямого доступа к тексту справки.

Attie
источник
11
Ага! В качестве немного более удобной альтернативы копанию man bashвы также можете help set.
Раврон
5
Вы легенда ... Время, которое я потратил на просмотр bashстраницы ... спасибо!
Attie
1
Моя самая первая команда после запуска bash, которой я не владею, это всегда set -o vi. Mistype это как set -oviи вы получите вышеописанное поведение.
Гунтрам Блом поддерживает Монику
Что касается Почему - я подозреваю, что есть сценарий (т.е. ". ./srciptname" вместо просто "./scriptname"), который затем завершается до того, как он сбрасывает -v, т.е. в конце он должен "установить + v"
jmullee
2
Кстати, я нахожу set -xболее полезным для регистрации или отладки вещей, отличных от control-flow, потому что он расширяет переменные, чтобы показать, какие команды на самом деле выполняются, например, echo fooвместоecho $my_string
Peter Cordes
11

По крайней мере, в Bash 4.3 эта команда имеет аналогичный эффект set -v:

trap 'echo "$BASH_COMMAND"' DEBUG

Чтобы проверить, влияет ли это на вас, запустите

trap -p DEBUG

Чтобы сбросить его, запустите

trap - DEBUG
wjandrea
источник