เป็นกลุ่มดำเนินการกระบวนการในพื้นหลัง


6

ฉันต้องการเรียกใช้กระบวนการในพื้นหลังใน Vim บน Mac OS X (หรือ Unix โดยทั่วไป)

ฉันหวังและคาดหวังสิ่งต่อไปนี้หรือตัวแปรบางอย่างที่จะทำให้สิ่งนี้บรรลุผล:

execute "!my_command &"

หรือ

!my_command &

หรือ

!my_command \&

หรือทางเลือกอื่น ๆ

น่าเสียดายที่นี่ดูเหมือนจะไม่ทำงานmy_commandเลย ฉันคาดหวังว่าจะมีตัวเลือกที่บางเบา

ทางเลือกหนึ่งคือการเขียนสคริปต์ตัวตัดคำที่ใช้คำสั่งและออก แต่ฉันแน่ใจว่ามีคนทำเช่นนั้นแล้ว ( GNU Parallel ?)

วิธีที่ดีที่สุดในการทำสิ่งนี้ให้สำเร็จคืออะไร?


ได้ผลสำหรับฉันใน cygwin ...
nm

@nm: ขอบคุณ ดูเหมือนว่าจะเป็นปัญหาการหลบหนี (เครื่องหมายแอมเปอร์และไม่ถูกหลบหนีอย่างถูกต้อง) ด้วย MacVim (และอาจเป็นเพราะ MacVim 65 เท่านั้น); ผู้อื่นพบสิ่งนี้ในเช่นFreeBSDแต่วิธีการแก้ปัญหานั้นไม่ทำงานที่นี่
Brian M. Hunt

คำตอบ:


7

อาจเป็นเพราะmy_commandเทอร์มินัลต้องการโต้ตอบ คุณสามารถระบุหนึ่งด้วยหน้าจอ GNU หรือ tmux เช่น:

!screen -dm "my_command"

หรือ:

!tmux new -d "my_command"

ความคิดที่ดี. tmuxทำงานตามที่คาดไว้ ขอบคุณมาก @Thor
Brian M. Hunt

8

คำสั่งทั้งหมดด้านล่างทำงานตามที่คาดไว้เมื่อเรียกใช้งานใน MacVim (snapshot 66) และฉันค่อนข้างมั่นใจว่าพวกเขาจะทำงานบนกล่อง Ubuntu ของฉันที่บ้าน:

!mplayer song.mp3 &
:execute "!mplayer song.mp3 &"
:call system("mplayer song.mp3 &")

หากมันไม่ได้ผลสำหรับคุณคุณสามารถลองใช้หนึ่งในไม่กี่สคริปต์ที่อนุญาตให้คุณเรียกใช้คำสั่งแบบอะซิงโครนัส:

(และฉันเพิ่งเห็นว่า Thor แก้ปัญหาของคุณได้)


ขอบคุณที่รัก ณ จุดหนึ่งฉันสามารถสาบานทั้งหมดข้างต้นทำงานให้ฉันเช่นกัน แต่พวกเขาดูเหมือนจะหยุดโดยไม่มีเหตุผลที่ชัดเจน ไม่ว่าจะเกิดอะไรขึ้นก่อนที่คำแนะนำของ Thor ฉันจะดูที่ปลั๊กอินที่คุณแนะนำ แต่ฉันคิดว่าพวกเขาอาจ overkill สำหรับงานที่ได้รับ - แม้ว่าคำแนะนำจะได้รับการชื่นชม
Brian M. Hunt

คุณเปลี่ยนshellหรือเปลี่ยนตัวshellcmdflagเลือกหรือไม่?
romainl

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