วิธีการดำเนินการหลายคำสั่งหลังจากที่มีหนึ่งคำขอไปยังสถานี (โดยไม่ต้องใช้ไฟล์)?


22

ฉันสามารถ (1) เตรียมไฟล์ด้วยคำสั่งที่พิมพ์โดยคั่นด้วย end-line, (2) ทำให้มันปฏิบัติการได้, (3) เรียกใช้จากผู้จัดการระบบไฟล์หรือเทอร์มินัล

แต่นี่เป็นเรื่องไร้สาระสำหรับคำสั่งที่ไม่สามารถทำซ้ำได้และชุดอื่น ๆ ทุกครั้ง

ฉันสามารถพิมพ์คำสั่งเหล่านั้นไปยังเทอร์มินัลด้วยคำขอเดียวได้หรือไม่?

ฉันไม่รู้จักอักขระปลายทางสำหรับเทอร์มินัล - Ctrl, Shift หรือ Alt พร้อม Enter ไม่ทำงาน  


1
บนบรรทัดคำสั่งคำสั่งสามารถคั่นด้วยเครื่องหมายอัฒภาค
John1024

คำตอบ:


27

คุณสามารถแยกคำสั่งด้วยหรือ&&;

  • && รันคำสั่งถัดไปหากคำสั่งก่อนหน้านี้ออกด้วยสถานะ 0 (สำเร็จ):

    command1 && command2 && command3
    
  • ; รันทุกคำสั่งแม้ว่าคำสั่งก่อนหน้านี้จะออกด้วยสถานะที่ไม่ใช่ศูนย์:

    command1; command2; command3
    

คุณสามารถรวมตัวคั่นเหล่านี้ตามที่คุณต้องการ


6
สำหรับcommand1 && command2command2 จะถูกดำเนินการเมื่อ command1 สำเร็จเท่านั้น
souravc

การอภิปรายที่ดีที่เกี่ยวข้อง / โพสต์ที่คล้ายกัน: askubuntu.com/questions/334994/... stackoverflow.com/questions/13077241/...
gevang

@ souravc: ฉันทำการแก้ไขขอบคุณฉันได้เรียนรู้บางสิ่งบางอย่าง
MrVaykadji

ถ้ารวมsudo apt upgradeและsudo systemctl rebootคุณจะต้องเพิ่ม 'sudo' สองครั้งหรือจะจำ 'sudo สำหรับคำสั่งที่สองได้หรือไม่
Koen

9

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

  • เริ่มคำขอของคุณ (บรรทัดแรก) ด้วยif :; then(หมายความว่า: ถ้าเป็นจริงก็ให้ทำ) แล้วกดEnter; พรอมต์ของคุณจะเปลี่ยนในตอนนี้>และจะไม่มีการดำเนินการใด ๆ

  • พิมพ์คำสั่งของคุณแต่ละคำสั่งตามด้วย Enter

  • เสร็จสิ้นการร้องขอของคุณด้วยกับfi(ตอนท้ายของการดังกล่าวข้างต้นifสภาพ) Enterและกด ตอนนี้คำสั่งทั้งหมดของคุณจะถูกดำเนินการตามลำดับที่กำหนด

ตัวอย่าง:

radu@Radu: ~ $ if :; then
> echo 'something'
> echo 'something else'
> echo 'List current directory contents:'
> ls
> echo 'Change current directory with root directory:'
> cd
> #finish
> fi
something
something else
List current directory contents:
Backups            Desktop           forma3d  Public      Untitled txt.txt~
bin                Documente         Music    Templates   Videos
configuration.php  examples.desktop  passwd~  tmp~
Downloads          file~             Poze     Ubuntu One
Change current directory with root directory:
radu@Radu: / $

if true; thenอาจอ่านได้ชัดเจนกว่าถ้าต้องการ :อาจสับสนกับการ;ได้อย่างรวดเร็วก่อน
kiri

4

ก่อนอื่นให้ใส่{สายของตัวเอง
จากนั้นแทรกคำสั่งของคุณ
จากนั้นใส่ในบรรทัดใหม่และกด} Enterคำสั่งของคุณจะถูกดำเนินการ

ตัวอย่าง:

{
echo list
echo of
echo commands
echo to run at once
}

ซึ่งจะพิมพ์ (ทั้งหมดในครั้งเดียวโดยไม่มีพร้อมท์ระหว่าง):

list
of
commands
to run at once

ในฐานะที่เป็นข้อความด้าน{ .. }คือไวยากรณ์การจัดกลุ่มคำสั่ง Bash มันมักจะมีประโยชน์ร่วมกับ&&หรือ||('และ' และ 'หรือ' ตามลำดับ)


เป็นสิ่งเดียวกันกับที่if :; thenกล่าวถึงแล้วหรือไม่ หรือมันแตกต่างกันเล็กน้อย?
MrVaykadji

1
@MrVaykadji เป็นผลลัพธ์เดียวกัน แต่เป็นวิธีการอื่น if :รันการทดสอบกับคำสั่ง null ซึ่งจะส่งคืนจริงเสมอ { .. }เพียงจัดกลุ่มคำสั่งเข้าด้วยกัน โดยส่วนตัวแล้วฉัน{ .. }จำได้ง่ายกว่า
kiri
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.