เหตุใดระบบ 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 อย่าทำอย่างนั้น!
Toby Speight

5
ใช่ฉันรู้เพื่อหลีกเลี่ยงการรูทบ่อยครั้ง สิ่งนี้อยู่บน VM ในสภาพแวดล้อมการทดสอบที่จำเป็นต้องรูท
Chad

9
@TobySpeight นี่คือการเจาะคำแนะนำ
rackandboneman

2
@TobySpeight อย่างจริงจังอย่าผลักว่าเป็นกฎเด็ดขาด บอกฉันว่ามีอะไรผิดปกติกับsudo -iการใช้ชุดคำสั่งระดับรากหรือไม่ โดยเฉพาะเมื่อฉันทำการดีบั๊กอะไร
Duncan X Simpson

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.

ดูbashmanpage (ในส่วน " คำสั่ง Shell Builtin ") สำหรับข้อมูลเพิ่มเติมเกี่ยวกับsetคำสั่งในตัว

หรือเรียกใช้help setจากภายในbashเพื่อเข้าถึงข้อความวิธีใช้โดยตรง


11
อ้อ! เป็นทางเลือกที่สะดวกมากขึ้นเล็กน้อยที่จะขุดผ่านคุณยังสามารถman bash help set
ravron

5
คุณอธิบาย ... เวลาที่ฉันเลื่อนดูbashmanpage ... ขอบคุณ!
Attie

1
set -o viคำสั่งแรกของฉันหลังจากที่เริ่มต้นทุบตีที่ฉันไม่ได้เป็นเจ้าของอยู่เสมอ พิมพ์ผิดที่เป็นset -oviและคุณจะได้รับพฤติกรรมดังกล่าวข้างต้น
Guntram Blohm

สำหรับทำไม - ฉันจะสงสัยว่ามีสคริปต์ที่มีแหล่งที่มา (เช่น ". ./srciptname" แทนที่จะเป็นเพียงแค่ "./scriptname") ซึ่งจากนั้นออกก่อนที่มันจะปลดล็อค -v เช่นท้ายที่สุดควร "set + v"
jmullee

2
BTW ฉันพบว่าset -xมีประโยชน์มากขึ้นสำหรับการบันทึกหรือแก้ไขข้อบกพร่องอื่น ๆ นอกเหนือจากการควบคุมการไหลเพราะมันขยายตัวแปรเพื่อแสดงคำสั่งที่กำลังทำงานจริงเช่นecho fooแทนecho $my_string
Peter Cordes

11

อย่างน้อยใน Bash 4.3 คำสั่งนี้มีผลคล้ายกับset -v:

trap 'echo "$BASH_COMMAND"' DEBUG

หากต้องการตรวจสอบว่าสิ่งนี้มีผลกับคุณหรือไม่ให้เรียกใช้

trap -p DEBUG

หากต้องการยกเลิกการกำหนดให้เรียกใช้

trap - DEBUG
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.