ฉันต้องการวางรหัสทุบตีแบบหลายบรรทัดลงในเทอร์มินัล แต่เมื่อใดก็ตามที่ฉันทำแต่ละบรรทัดจะทำงานเป็นคำสั่งแยกกันทันทีที่วาง
ฉันต้องการวางรหัสทุบตีแบบหลายบรรทัดลงในเทอร์มินัล แต่เมื่อใดก็ตามที่ฉันทำแต่ละบรรทัดจะทำงานเป็นคำสั่งแยกกันทันทีที่วาง
คำตอบ:
ลองใส่\
ที่ส่วนท้ายของแต่ละบรรทัดก่อนคัดลอก
ตัวอย่าง:
echo "Hello world" && \
script_b.sh
echo $?
$?
ตอนนี้รหัสออก ( ) เป็นลำดับคำสั่งทั้งหมดไม่ใช่แค่คำสั่งสุดท้าย
ฉันแปลกใจจริงๆที่ไม่มีคำตอบนี้ฉันกำลังค้นหาวิธีแก้ปัญหาสำหรับคำถามนี้และฉันคิดว่านี่เป็นแนวทางที่ง่ายที่สุดและมีความยืดหยุ่น / ให้อภัยมากกว่า ...
หากคุณต้องการวางหลายบรรทัดจากเว็บไซต์ / โปรแกรมแก้ไขข้อความ / ฯลฯ ลงใน bash ไม่ว่าจะเป็นคำสั่งต่อบรรทัดหรือฟังก์ชันหรือสคริปต์ทั้งหมด ... เพียงแค่เริ่มต้นด้วย a (
และลงท้ายด้วย a )
และ Enter เช่น ในตัวอย่างต่อไปนี้:
ถ้าฉันมีหยดต่อไปนี้
function hello {
echo Hello!
}
hello
คุณสามารถวางและยืนยันในเทอร์มินัลโดยใช้ bash โดย:
เริ่มต้นด้วย (
วางข้อความของคุณแล้วกด Enter (เพื่อให้สวย) ... หรือไม่
ลงท้ายด้วย a )
และกด Enter
ตัวอย่าง:
imac:~ home$ ( function hello {
> echo Hello!
> }
> hello
> )
Hello!
imac:~ home$
ข้อความที่วางไว้จะดำเนินการต่อโดยอัตโนมัติโดยมีการป้อนล่วงหน้า>
สำหรับแต่ละบรรทัด ฉันได้ทดสอบกับหลายบรรทัดด้วยคำสั่งต่อบรรทัดฟังก์ชันและสคริปต์ทั้งหมด หวังว่านี่จะช่วยให้คนอื่นประหยัดเวลาได้บ้าง!
หากคุณกดC-x C-e
คำสั่งที่จะเปิดโปรแกรมแก้ไขเริ่มต้นซึ่งกำหนดไว้.bashrc
หลังจากนั้นคุณสามารถใช้คุณสมบัติที่มีประสิทธิภาพทั้งหมดของตัวแก้ไขของคุณได้ เมื่อคุณบันทึกและออกบรรทัดจะรอคุณเข้า
หากคุณต้องการกำหนดตัวแก้ไขของคุณเพียงแค่เขียนสำหรับ Ex EDITOR=emacs -nw
หรือEDITOR=vi
ด้านในของ~/.bashrc
emacs
และvi
ทำ) และในการออมและการออกคำสั่งที่จะดำเนินการได้ทันที
นอกจากแบ็กสแลชแล้วหากบรรทัดลงท้ายด้วย|
หรือ&&
หรือ||
บรรทัดถัดไปจะดำเนินต่อไป
เพิ่มวงเล็บรอบบรรทัด ตัวอย่าง:
$ (
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
)
(
จัดฟันการจัดฟัน{
ก็จะใช้งานได้เหมือนกันในตัวอย่างข้างต้น
ความเป็นไปได้อื่น:
bash << EOF
echo "Hello"
echo "World"
EOF
เพื่อป้องกันไม่ให้บรรทัดคำสั่งยาว ๆ ในไฟล์ข้อความฉันเก็บตัวอย่างคำสั่ง copy-pase ไว้ดังนี้:
echo a;\
echo b;\
echo c
ลองวิธีนี้:
echo $(
cmd1
cmd2
...
)
iTerm จัดการคำสั่งหลายบรรทัดได้อย่างสมบูรณ์แบบบันทึกคำสั่งหลายบรรทัดเป็นคำสั่งเดียวจากนั้นเราสามารถใช้Cmd
+ Shift
+ ;
เพื่อนำทางประวัติ
ตรวจสอบเคล็ดลับ iTerm เพิ่มเติมได้ที่การทำงานอย่างมีประสิทธิภาพกับ iTerm
ลอง
out=$(cat)
จากนั้นวางบรรทัดของคุณแล้วกด Ctrl-D (แทรกอักขระ EOF) อินพุตทั้งหมดจนถึง Ctrl-D จะถูกเปลี่ยนเส้นทางไปที่ cat's stdout
$ out=$(cat) && eval "$out"
. กด Enter หลังจากบรรทัดสุดท้ายแล้ว CTRL + D ตามที่แนะนำข้างต้น