ดำเนินการสคริปต์ทุบตีจากเป็นกลุ่ม


21

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

เช่นฉันเปิดเป็นกลุ่มและพิมพ์สิ่งนี้:

#!/bin/bash

ll | while read line
do
    echo $line
done

ฉันไม่ได้บันทึกไฟล์นี้ฉันใช้ vim เพื่อทำให้ bash-scripting ง่ายขึ้น ฉันรู้ว่าฉันสามารถรันคำสั่ง bash ผ่าน!ในกลุ่ม แต่สิ่งที่เกี่ยวกับการดำเนินการทุกอย่างที่อยู่ในบัฟเฟอร์?


4
คุณรู้หรือไม่ว่าคุณสามารถแก้ไขบรรทัดคำสั่งปัจจุบันใน Vim ด้วย<C-x><C-e>และดำเนินการกับการเขียนได้ใช่ไหม
romainl

หากคุณรัน bash ด้วยตัวเลือกนี้set -o viคุณสามารถกดEsc-vเพื่อแก้ไขบรรทัดคำสั่งใน vi จากนั้นEsc-:wqให้ดำเนินการ
roblogic

คำตอบ:


35

ผมเขียนคำตอบที่กว้างขวางสวยเกี่ยวกับเรื่องนี้ไปบนกองล้น แนวคิดพื้นฐานคือเนื่องจากคำสั่ง write เกี่ยวกับการเขียนที่ไม่บันทึกคุณสามารถเขียนข้อความในบัฟเฟอร์ของคุณลงในโปรแกรมภายนอกเช่น python หรือ bash ในกรณีของคุณคุณต้องการทำสิ่งต่อไปนี้:

:w !bash

หรือ

:w !sh

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

:w | !bash %

ซึ่งบันทึกไฟล์ของคุณจากนั้นเรียกใช้เป็นสคริปต์ทุบตี คุณสามารถเลือกสิ่งที่เหมาะสมกับคุณ


มีวิธีที่จะให้ตัวเลือกอาร์กิวเมนต์ด้วยวิธีนี้หรือไม่? ฉันพยายาม:w !bash -a testแต่ได้รับ "ไม่สามารถเรียกใช้ไฟล์ไบนารี"
St.Antario

@ St.Antario อืม ฉันแน่ใจว่าจะต้องมีวิธีการบางอย่าง แต่ทุบตีของฉันเป็นสนิมสวย (ฉันส่วนใหญ่ใช้ windows) เมื่อฉันลองมันใน cygwin ด้วยtestไฟล์เปล่ามันก็ใช้ได้ดีสำหรับฉัน คำสั่งควรทำอะไรและควรtestมีอะไร?
DJMcMayhem

กรณีจริงของฉันค่อนข้างซับซ้อนดังนั้นขอแค่พิมพ์อาร์กิวเมนต์ที่ส่งเข้ามา BTW คุณหมายถึงอะไรควรtest มีอะไรบ้าง เป็นเพียงการโต้แย้งไปยังtest -a
St.Antario

1
@ St.Antario โอ้ฉันเข้าใจแล้ว ฉันคิดว่าtestควรจะเป็นไฟล์ ฉันไม่แน่ใจจริงๆว่าจะทำอย่างไร หากคุณกำลังลองสิ่งที่ซับซ้อนมันอาจเป็นการดีกว่าที่จะบันทึกลงในไฟล์ มันอาจจะคุ้มค่าที่จะถามเป็นคำถามแยกต่างหากเพื่อให้คุณสามารถให้รายละเอียดเพิ่มเติม อาจเป็นคำถามที่ดีสำหรับUnix และ Linux
DJMcMayhem

4

สถานการณ์จำลอง: คุณกำลังทำงานใน bash shell ขั้นแรกตรวจสอบให้แน่ใจว่าโหมดแก้ไขในตัวเครื่องเป็น vi:

$ set -o vi

ตอนนี้เมื่อคุณพบว่าตัวเองทำงานอยู่ในคำสั่งที่ยาวเช่นต่อไปนี้ตี+Escv

$ fjhwfq this is my long command

สิ่งนี้จะโหลดคำสั่งของคุณไปยังviเซสชันชั่วคราว ตอนนี้คุณสามารถแก้ไขได้ตามที่คุณต้องการและแม้แต่เพิ่มคำสั่งอื่น ...

fjhwfq some long command
ls -l

เมื่อคุณแก้ไขเสร็จแล้วให้พิมพ์Esc :wqและคำสั่งจะถูกดำเนินการตัวอย่างเช่น:

$ fjhwfq some long command
fjhwfq some long command
bash: fjhwfq: command not found
ls -l
total 44
-rw-r--r-- 1 ropata Domain Users 24073 Nov 10 14:17 _viminfo
drwxr-xr-x 1 ropata Domain Users     0 Jul 15 13:57 bin/
-rw-r--r-- 1 ropata Domain Users   956 Nov  7 10:43 custom_env

3
อาจไม่ทำงานหากคุณมี macbook ใหม่หากไม่มีEscคีย์;)
roblogic

1
MacBooks ใหม่ไม่มีEscกุญแจ! พวกเขาจะใช้ Vim ได้อย่างไร?
Hubro

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