วิธีที่จะทำให้ทุบตีไม่ห่อผลลัพธ์?


33

เมื่อใดก็ตามที่คำสั่งบางคำสร้างบรรทัดที่ยาวเป็นเอาต์พุต (ตัวอย่างเช่นเมื่อls -lโฟลเดอร์ที่มีไฟล์ที่มีชื่อยาว) บรรทัดที่ยาวจะถูกรวมไว้ที่บรรทัดถัดไปดังนั้นจึงทำให้โครงสร้างคอลัมน์ยุ่งเหยิง

มีวิธีหลีกเลี่ยงสิ่งนี้หรือไม่? มีบางอย่างคล้ายกับตัวเลือกกลุ่ม 'nowrap'


ปรับปรุง

ฉันสังเกตเห็นปัญหากับคำตอบที่ยอมรับ:
ถ้าฉันทำนามแฝงเช่น: alias ll="tput rmam; ls -l; tput smam"
แล้วลอง grep มันออก: ll | grep foo
มันจะยังคงพิมพ์ไฟล์ทั้งหมดเช่นโดยไม่ต้อง grep

วิธีแก้ปัญหาที่ฉันพบคือใส่วงเล็บไปทั่วนามแฝงทั้งหมด:
alias ll="(tput rmam; ls -l; tput smam)"



คำตอบ:


27

โปรดทราบว่าสิ่งนี้ไม่เกี่ยวข้องกับ bash (เมื่อคุณเปิดใช้งานคำสั่ง bash ก็จะรอให้เสร็จ) และทุกอย่างที่เกี่ยวข้องกับเทอร์มินัล

เทอร์มินัลอีมูเลเตอร์ส่วนใหญ่ห่อที่ระยะขอบด้านขวาโดยค่าเริ่มต้น แต่สามารถปิดได้โดยใช้ลำดับการควบคุมที่เหมาะสมหากเทอร์มินัลอีมูเลเตอร์สนับสนุน จากนั้นเส้นยาวจะถูกตัดทอนเพียง:

printf '\033[?7l'
ls -l /a/folder/that/contains/files/with/long/names
printf '\033[?7h'

ใช่นี่คือสิ่งที่ฉันกำลังมองหาขอบคุณ Gilles!
Mihai Rotaru

12
พกพาได้มากกว่า:tput rmam; ls -l longname; tput smam
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

ดียิ่งขึ้น; แต่ [rs] mam มาจากไหน ฉันค้นหาคู่มือ tput และ termcap แต่ไม่พบอะไรเกี่ยวกับพวกเขา?
Mihai Rotaru

2
@Mihai: ลองเอกสาร terminfo ( man 5 terminfoบน Linux)
Gilles 'หยุดความชั่วร้าย'

แน่นอนมันอยู่ที่นั่น
Mihai Rotaru


5

คุณสามารถใช้ฟังก์ชันดังนี้:

nowrap() 
{ 
   cut -c-$(tput cols); 
}

โปรดทราบว่าคุณจะต้องใช้คำสั่งนำหน้าด้วยnowrapหรืออะไรก็ตามที่คุณตั้งชื่อฟังก์ชั่น


มันใช้งานได้ แต่ฉันทำรหัสสีหาย วิธีใดในการรักษาที่ดีเช่นกัน?
Mihai Rotaru

3

คุณสามารถแทนที่ฟังก์ชั่นเพื่อให้ทำงานโดยอัตโนมัติtput rmamก่อน grep ของคุณและtput smamหลังจาก:

function grep () {
  tput rmam;
  command grep "$@";
  tput smam;
}

วางลงในของคุณ.bash_profileและเมื่อใดก็ตามที่คุณเรียกใช้grepมันจะ grep โดยไม่ต้องตัดบรรทัด

สิ่งนี้ได้รับการแก้ไขอย่างหนักขอโทษผู้แสดงความคิดเห็น



2

ไพพ์ไปยังคำสั่งที่น้อยกว่าด้วยสวิตช์ -S:

ls -l | less -S

จากนั้นคุณสามารถใช้ลูกศรขึ้น / ลง / ซ้าย / ขวาเพื่อเลื่อนและพิมพ์ q เพื่อออก


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