Mengapa sistem Linux saya mengulangi setiap perintah yang saya ketikkan?


55

Saya menggunakan sistem Ubuntu Linux, dan setiap perintah yang saya masukkan ditampilkan pada baris berikutnya, diikuti oleh output dari perintah. Sebagai contoh:

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!

Saya pikir itu mungkin ada hubungannya dengan prompt, yaitu sebagai berikut (PS1):

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

tetapi meninjau panduan online untuk meminta urutan pelarian tidak menghasilkan sesuatu yang jelas.


20
Anda juga tampaknya masuk sebagai root. Jangan lakukan itu!
Toby Speight

5
Ya, saya tahu untuk menghindari root sebagian besar waktu. Ini pada VM di lingkungan pengujian sekali pakai di mana root diperlukan.
Chad

9
@TobySpeight ini basi, saran hafalan.
rackandboneman

2
@TobySpeight Serius, jangan memaksakan itu sebagai aturan mutlak. Katakan padaku, apa yang salah dengan menggunakan sudo -iuntuk menjalankan serangkaian perintah tingkat root? Terutama ketika saya sedang men-debug sesuatu?
Duncan X Simpson

2
@TobySpeight jika Anda tidak punya waktu untuk menjelaskan, jangan berikan "saran" selimut yang sering kali tidak membantu.
Tim

Jawaban:


89

Sepertinya Anda telah -vmenetapkan (sesuatu sedang berjalan set -v).

Untuk membalikkan ini, jalankan 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.

Lihat halaman bashmanual (di bawah bagian " Perintah Shell Builtin ") untuk informasi lebih lanjut tentang setperintah bawaan.

Atau jalankan help setdari dalam bashuntuk akses langsung ke teks bantuan.


11
Ya! Sebagai alternatif yang sedikit lebih nyaman untuk digali man bash, Anda juga bisa help set.
ravron

5
Kamu legenda ... Waktu yang kuhabiskan untuk menggulir bashhalaman buku ... terima kasih!
Attie

1
Perintah pertama saya setelah memulai sebuah bash yang tidak saya miliki selalu set -o vi. Kesalahan ketik itu set -ovidan Anda akan mendapatkan perilaku di atas.
Guntram Blohm

mengapa - saya menduga ada skrip yang bersumber (yaitu "./srciptname", bukan hanya "./scriptname") yang kemudian keluar sebelum terhapus -v, yaitu pada akhirnya harus "set + v"
jmullee

2
BTW, saya menemukan set -xlebih berguna untuk penebangan, atau debugging hal-hal selain aliran kontrol, karena ia memperluas variabel untuk menunjukkan perintah apa yang sebenarnya sedang dijalankan, misalnya echo foobukannyaecho $my_string
Peter Cordes

11

Setidaknya pada Bash 4.3, perintah ini memiliki efek yang mirip dengan set -v:

trap 'echo "$BASH_COMMAND"' DEBUG

Untuk memeriksa apakah ini memengaruhi Anda, jalankan

trap -p DEBUG

Untuk menghapusnya, jalankan

trap - DEBUG
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.