ฉันจะเปลี่ยนทิศทางคำสั่งเอาต์พุตไปยังกลุ่มใน bash ได้อย่างไร?


87

ฉันพยายามเปลี่ยนเส้นทางเอาต์พุตของคำสั่ง bash ไปเป็นไฟล์ใหม่

ถ้าฉันลองใช้ท่อตามด้านล่าง:

ls -la | vim

Bash แสดงให้ฉันเห็นข้อผิดพลาด:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

ฉันรู้ว่าฉันสามารถเปิดเป็นกลุ่มแล้วใช้:

:r !ls -la

แต่มีวิธีการทำเช่นนี้ในการทุบตีตัวเองเพื่อให้เป็นกลุ่มที่เปิดและเอาท์พุทจะถูกวางโดยอัตโนมัติ?

คำตอบ:


140

คุณสามารถใช้การทดแทนกระบวนการ (ใช้ได้กับแอปพลิเคชันที่ไม่สามารถอ่านได้STDIN):

vim <(ls -la)

หรือใช้vimฟังก์ชั่นเพื่ออ่านจากSTDIN:

ls -la | vim -

2
<(ls -la)เป็นจริงเปลี่ยนตัวกระบวนการมากกว่าแทนคำสั่ง
Eliah Kagan

1
ฉันชอบตัวเลือกที่เป็นกลุ่มมันช่วยให้ฉันสามารถค้นหาค้นหาและบันทึกผลลัพธ์ได้อย่างง่ายดายจากการถ่ายโอนข้อมูล
Josue Alexander Ibarra

38

คุณสนิทกับตัวเองจริงๆ คุณเพิ่งหายตัวละครไปหนึ่งตัว

ls -la | vim -

10
ในทางเทคนิคมันเป็นตัวละครสองตัว ;)
Cory Klein

19

นี่คือวิธีการอื่นหวังว่าจะสอนคนใหม่

หากคุณรู้ว่าคำสั่ง:r !ls -laทำงานได้เป็นกลุ่มคุณสามารถทำสิ่งต่อไปนี้เพื่อเปิด vim และทำให้มันรันคำสั่งทันทีที่เปิดขึ้นตรงจาก bash:

vim -c ':r! ls -la'

นี้จะเทียบเท่าของการเปิดแล้วรันคำสั่งvim :r! ls -laสิ่งนี้ควรทำงานกับvimคำสั่งใด ๆโดยที่คำสั่งมาหลังจาก-cตัวเลือก



1

หากเป้าหมายของคุณเพียงเพื่อให้ได้ผลลัพธ์เป็นไฟล์ข้อความคุณไม่จำเป็นต้องเรียกใช้เป็นกลุ่ม Bash สามารถทำมันคนเดียวด้วย

ls -la > outputfile.txt

1

setlocal buftype=nofile

นี่เป็นตัวเลือกที่ดีถ้าคุณจะสร้างนามแฝงเพื่อแทนที่less:

seq 100 | vim +':setlocal buftype=nofile' -

ตอนนี้คุณไม่จำเป็นต้องพิมพ์! ที่จะเลิก.

ตัวเลือกอื่นคือ:

seq 100 | vim +'nnoremap q :quit!' -

q<enter>เพื่อให้คุณสามารถออกจากที่มีเพียง


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