บางครั้งฉันจำเป็นต้องเขียนข้อความจากนั้นส่งข้อความไปยังคำสั่งอื่น เวิร์กโฟลว์ตามปกติของฉันมีลักษณะดังนี้:
vim
# I edit and save my file as file.txt
cat file.txt | pandoc -o file.pdf # pandoc is an example
rm file.txt
ฉันพบว่ามันยุ่งยากและพยายามเรียนรู้การเขียนสคริปต์ทุบตีฉันต้องการทำให้กระบวนการง่ายขึ้นมากโดยการเขียนคำสั่งที่เปิดไฟเอดิเตอร์และเมื่อเอดิเตอร์ปิดไพพ์เอาต์พุตของเอดิเตอร์เพื่อ stdout quickedit | pandoc -o file.pdf
แล้วฉันจะสามารถเรียกใช้คำสั่งเป็น
ฉันไม่แน่ใจว่ามันจะทำงานอย่างไร ฉันได้เขียนฟังก์ชันเพื่อทำให้สิ่งนี้เป็นไปโดยอัตโนมัติโดยทำตามขั้นตอนการทำงานที่ถูกต้องข้างต้นรวมถึงการเพิ่มเติมบางอย่าง มันสร้างสตริงแบบสุ่มเพื่อทำหน้าที่เป็นชื่อไฟล์และส่งผ่านไปยังกลุ่มเมื่อฟังก์ชันถูกเรียกใช้ เมื่อผู้ใช้ออกเป็นกลุ่มโดยการบันทึกไฟล์ฟังก์ชั่นพิมพ์ไฟล์ไปยังคอนโซลแล้วลบไฟล์
function quickedit {
filename="$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32)"
vim $filename
cat $filename
rm $filename
}
# The problem:
# => Vim: Warning: Output is not to a terminal
ปัญหาที่ฉันพบในไม่ช้าก็คือเมื่อฉันทำบางสิ่งบางอย่างเช่นquickedit | command
เสียงเรียกเข้าตัวเองไม่สามารถใช้เป็นตัวแก้ไขได้เนื่องจากเอาต์พุตทั้งหมดถูก จำกัด ไปยังไพพ์
ฉันสงสัยว่ามีวิธีแก้ไขปัญหานี้หรือไม่เพื่อให้ฉันสามารถส่งออกquickedit
ฟังก์ชั่นของฉันได้ ทางเลือกที่ไม่ดีก็คือไฟขึ้นบรรณาธิการแยกพูดข้อความประเสริฐ แต่ฉันต้องการที่จะอยู่ใน terminal
mktemp
มากกว่าสร้างใหม่ในแบบที่ไม่ปลอดภัย
:w !pandoc -o file.pdf
? (หมายเหตุ: ช่องว่างระหว่างw
และ!
จำเป็น)