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


108

ฉันต้องการวางรหัสทุบตีแบบหลายบรรทัดลงในเทอร์มินัล แต่เมื่อใดก็ตามที่ฉันทำแต่ละบรรทัดจะทำงานเป็นคำสั่งแยกกันทันทีที่วาง

คำตอบ:


111

ลองใส่\ที่ส่วนท้ายของแต่ละบรรทัดก่อนคัดลอก

ตัวอย่าง:

echo "Hello world" && \
script_b.sh

echo $?

$?ตอนนี้รหัสออก ( ) เป็นลำดับคำสั่งทั้งหมดไม่ใช่แค่คำสั่งสุดท้าย


22
หมายเหตุ: ช่องว่างต่อท้ายจะทำลายมัน!
Max Reeder

56

ฉันแปลกใจจริงๆที่ไม่มีคำตอบนี้ฉันกำลังค้นหาวิธีแก้ปัญหาสำหรับคำถามนี้และฉันคิดว่านี่เป็นแนวทางที่ง่ายที่สุดและมีความยืดหยุ่น / ให้อภัยมากกว่า ...

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

ถ้าฉันมีหยดต่อไปนี้

function hello {
    echo Hello!
}
hello

คุณสามารถวางและยืนยันในเทอร์มินัลโดยใช้ bash โดย:

  1. เริ่มต้นด้วย (

  2. วางข้อความของคุณแล้วกด Enter (เพื่อให้สวย) ... หรือไม่

  3. ลงท้ายด้วย a )และกด Enter

ตัวอย่าง:

imac:~ home$ ( function hello {
>     echo Hello!
> }
> hello
> )
Hello!
imac:~ home$ 

ข้อความที่วางไว้จะดำเนินการต่อโดยอัตโนมัติโดยมีการป้อนล่วงหน้า>สำหรับแต่ละบรรทัด ฉันได้ทดสอบกับหลายบรรทัดด้วยคำสั่งต่อบรรทัดฟังก์ชันและสคริปต์ทั้งหมด หวังว่านี่จะช่วยให้คนอื่นประหยัดเวลาได้บ้าง!


4
วิธีที่ง่ายที่สุด IMO
Hobroker

1
@Toolkit สำหรับสิ่งง่ายๆมันจะทำงานตามที่คุณอธิบายไว้ แต่โซลูชันที่ฉันเสนอจะใช้ได้กับสถานการณ์ที่ซับซ้อนมากขึ้น (การแบ่งบรรทัดฟังก์ชันหลาย ๆ สคริปต์ทั้งหมด ฯลฯ )
TryTryAgain

1
ซึ่งจะเรียกใช้คำสั่งที่วางไว้ใน subshell ดังนั้นจึงมักไม่ทำตามที่คุณต้องการ คุณสามารถใช้วงเล็บปีกกาแทนวงเล็บเพื่อบังคับให้รันในเชลล์ปัจจุบัน แต่จริงๆแล้วอย่าทำอย่างใดอย่างหนึ่ง เปลือกสามารถรับมือได้
tripleee

34

หากคุณกดC-x C-eคำสั่งที่จะเปิดโปรแกรมแก้ไขเริ่มต้นซึ่งกำหนดไว้.bashrcหลังจากนั้นคุณสามารถใช้คุณสมบัติที่มีประสิทธิภาพทั้งหมดของตัวแก้ไขของคุณได้ เมื่อคุณบันทึกและออกบรรทัดจะรอคุณเข้า

หากคุณต้องการกำหนดตัวแก้ไขของคุณเพียงแค่เขียนสำหรับ Ex EDITOR=emacs -nwหรือEDITOR=viด้านในของ~/.bashrc


2
เทคนิคที่เป็นประโยชน์ แต่ทราบว่าการแก้ไขจะต้องทำงานพร้อมกัน (ตามemacsและviทำ) และในการออมและการออกคำสั่งที่จะดำเนินการได้ทันที
mklement0

16

นอกจากแบ็กสแลชแล้วหากบรรทัดลงท้ายด้วย|หรือ&&หรือ||บรรทัดถัดไปจะดำเนินต่อไป


13

เพิ่มวงเล็บรอบบรรทัด ตัวอย่าง:

$ (
sudo apt-get update
dokku apps
dokku ps:stop APP # repeat to shut down each running app
sudo apt-get install -qq -y dokku herokuish sshcommand plugn
dokku ps:rebuildall # rebuilds all applications
)

2
โปรดทราบเช่นเดียวกับการ(จัดฟันการจัดฟัน{ก็จะใช้งานได้เหมือนกันในตัวอย่างข้างต้น
GypsyCosmonaut



5

เพื่อป้องกันไม่ให้บรรทัดคำสั่งยาว ๆ ในไฟล์ข้อความฉันเก็บตัวอย่างคำสั่ง copy-pase ไว้ดังนี้:

echo a;\
echo b;\
echo c

คำตอบนี้ดูเหมือนจะบรรลุผลเช่นเดียวกับคำตอบที่ยอมรับโดยมีเพียง 2 แทนที่จะเป็น 3 (&&) อักขระ เหตุใดคำตอบที่ได้รับการยอมรับจึงเป็นที่ต้องการมาก
al-ash


0

iTerm จัดการคำสั่งหลายบรรทัดได้อย่างสมบูรณ์แบบบันทึกคำสั่งหลายบรรทัดเป็นคำสั่งเดียวจากนั้นเราสามารถใช้Cmd+ Shift+ ;เพื่อนำทางประวัติ

ตรวจสอบเคล็ดลับ iTerm เพิ่มเติมได้ที่การทำงานอย่างมีประสิทธิภาพกับ iTerm


-1

ลอง

out=$(cat)

จากนั้นวางบรรทัดของคุณแล้วกด Ctrl-D (แทรกอักขระ EOF) อินพุตทั้งหมดจนถึง Ctrl-D จะถูกเปลี่ยนเส้นทางไปที่ cat's stdout


ลองสิ่งนี้: $ out=$(cat) && eval "$out". กด Enter หลังจากบรรทัดสุดท้ายแล้ว CTRL + D ตามที่แนะนำข้างต้น
Mohamed Bana
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.