Tại sao hệ thống Linux của tôi lặp lại mọi lệnh mà tôi gõ?


55

Tôi đang sử dụng hệ thống Ubuntu Linux và mọi lệnh tôi nhập được hiển thị trên dòng tiếp theo, theo sau là đầu ra của lệnh. Ví dụ:

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!

Tôi nghĩ rằng nó có thể phải làm với lời nhắc, như sau (PS1):

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

nhưng xem xét các hướng dẫn trực tuyến để nhắc nhở các chuỗi thoát không cho thấy bất cứ điều gì rõ ràng.


20
Bạn cũng xuất hiện để đăng nhập với quyền root. Đừng làm vậy!
Toby Speight

5
Vâng, tôi biết để tránh root hầu hết thời gian. Đây là một máy ảo trong môi trường thử nghiệm vứt đi, nơi cần có root.
Chad

9
@TobySpeight đây là hackneyed, lời khuyên vẹt.
rackandboneman

2
@TobySpeight Nghiêm túc, đừng coi đó là một quy tắc tuyệt đối. Nói cho tôi biết, có gì sai khi sử dụng sudo -iđể chạy một loạt các lệnh cấp gốc? Đặc biệt là khi tôi gỡ lỗi một cái gì đó?
Duncan X Simpson

2
@TobySpeight nếu bạn không có thời gian để giải thích, đừng đưa ra lời khuyên về chăn gối mà thường không có ích.
Tim

Câu trả lời:


89

Có vẻ như bạn đã -vthiết lập (một cái gì đó đang chạy set -v).

Để đảo ngược điều này, chạy 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.

Xem bashtrang hướng dẫn (trong phần " Lệnh tích hợp Shell ") để biết thêm thông tin về setlệnh tích hợp.

Hoặc chạy help settừ bên trong bashđể truy cập trực tiếp hơn vào văn bản trợ giúp.


11
Vâng! Là một thay thế thuận tiện hơn một chút để đào qua man bash, bạn cũng có thể help set.
ravron

5
Bạn huyền thoại ... Thời gian tôi đã dành để cuộn trong bashtrang web ... cảm ơn!
Attie 20/03/18

1
Lệnh đầu tiên của tôi sau khi bắt đầu một bash mà tôi không luôn luôn sở hữu set -o vi. Gõ nhầm set -ovivà như bạn sẽ có hành vi trên.
Guntram Blohm

đối với Tại sao - tôi sẽ nghi ngờ có một tập lệnh có nguồn gốc (nghĩa là "./srciptname" thay vì chỉ "./scriptname") mà sau đó thoát ra trước khi bỏ cài đặt -v, tức là cuối cùng nó sẽ "set + v"
jmullee

2
BTW, tôi thấy set -xhữu ích hơn cho việc ghi nhật ký hoặc gỡ lỗi những thứ khác ngoài luồng điều khiển, vì nó mở rộng các biến để hiển thị những lệnh nào đang thực sự được chạy, ví dụ echo foothay vìecho $my_string
Peter Cordes

11

Ít nhất là trên Bash 4.3, lệnh này có tác dụng tương tự set -v:

trap 'echo "$BASH_COMMAND"' DEBUG

Để kiểm tra nếu điều này ảnh hưởng đến bạn, hãy chạy

trap -p DEBUG

Để bỏ đặt nó, hãy chạy

trap - DEBUG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.