อาร์กิวเมนต์ '-v' และ '-x' หมายถึงการทุบตีอย่างไร


17

ฉันได้เห็นเชลล์สคริปต์สองสามตัวด้วย shebang ต่อไปนี้

#!/bin/bash -x -v 

แต่man bashไม่ได้อธิบายสิ่งที่ขัดแย้งเหล่านี้-xและ-vยืนถ้าพวกเขาจะเป็นของbashที่ทุกคน

ดังนั้นสิ่งเหล่านั้น-xและ-v(และข้อโต้แย้งที่เป็นไปได้อื่น ๆ ) หมายความว่าอย่างไร

คำตอบ:


26

จากman bash(ใช่มันเป็นหน้าใหญ่โดยปกติการค้นหาโดย Google จะเร็วกว่า):

-x หลังจากขยายแต่ละคำสั่งง่าย ๆ สำหรับคำสั่งคำสั่ง case เลือกคำสั่งหรือเลขคณิตสำหรับคำสั่งแสดงค่าที่ขยายของ PS4 ตามด้วยคำสั่งและอาร์กิวเมนต์ที่ขยายหรือรายการคำที่เกี่ยวข้อง

อย่างมีประสิทธิภาพ: เมื่อคุณเรียกใช้สคริปต์มันจะแสดงการกระทำทั้งหมดที่ทำในสคริปต์นั้น ดังนั้น ifs, loops และ command ทั้งหมดจึงทำงาน มีประโยชน์มากสำหรับการแก้ไขข้อบกพร่อง

-v พิมพ์บรรทัดอินพุตเชลล์ตามที่อ่าน เมื่อรันสคริปต์สคริปต์จะพิมพ์สคริปต์ทั้งหมดขณะที่อ่านไฟล์ เมื่อคุณใช้เชลล์แบบโต้ตอบมันจะแสดงแต่ละคำสั่งหลังจากที่คุณกด Enter

คำพูดข้างต้นมาจากคำอธิบายของsetคำสั่ง builtin ในman bashซึ่งยังอธิบายว่าตัวเลือกสำหรับsetยังสามารถส่งผ่านเป็นอาร์กิวเมนต์ (ในบรรทัด Shebang):

ตัวเลือกจะปิดตามค่าเริ่มต้นเว้นแต่จะระบุไว้เป็นอย่างอื่น การใช้+ แทนที่จะ-ทำให้ตัวเลือกเหล่านี้ถูกปิด ตัวเลือกยังสามารถระบุได้ว่าเป็นข้อโต้แย้งกับการภาวนาของเปลือก $-ชุดปัจจุบันของตัวเลือกที่อาจพบได้ใน สถานะการส่งคืนจะเป็นจริงเสมอเว้นแต่จะพบตัวเลือกที่ไม่ถูกต้อง


ตกลงดังนั้นมันเป็นเรื่องง่ายที่จะทุบตีและฉันก็อาจจะมีรุ่นที่แตกต่างโดยไม่มีข้อโต้แย้งเหล่านี้?
อเล็กซ์

หากคุณกำลังพูดถึง bash: ฉันคิดว่าการเผยแพร่ bash ทั้งหมดของทศวรรษที่ผ่านมาจะสนับสนุนข้อโต้แย้งเหล่านี้ หากคุณกำลังพูดถึง man page: มันใหญ่มากและคุณต้องรู้ว่าคุณกำลังมองหาอะไร แต่มันมีอยู่ (อย่างน้อยใน Ubuntu 13.04) โดยทั่วไปการค้นหาของ Google นั้นรวดเร็วกว่า
mtak

6
1 "การค้นหาของ Google ได้เร็วขึ้น" -> /-xสองสามครั้งคุณจะได้รับมีในman(ที่จริงมันless) คุณสามารถค้นหาซ้ำครั้งล่าสุดด้วย/ลูกศร + ขึ้น แต่คุณต้องเลื่อนหน้าลงเพื่อให้การค้นหาใด ๆ ในปัจจุบันถูกกดปิดหน้าจอ ( /เป็นการค้นหาไปข้างหน้า?ย้อนหลัง)
goldilocks

2
@ TAFKA'goldilocks 'ฉันคิดว่ามันขึ้นอยู่กับ distro ของคุณ ในหน้าคู่มือทุบตี Ubuntu 13.04 การเข้าชมครั้งที่ 43 เป็นสิ่งที่ถูกต้อง ง่ายกว่าในการค้นหาการเข้าชมครั้งต่อไปโดยใช้nการค้นหาแบบล่วงหน้าและNการค้นหาแบบย้อนหลัง
mtak

ขออภัยในความเป็นจริงผมกำลังมองหาที่test -xอยู่ภายใต้เงื่อนไขสำนวน (ตีสาม) set -xไม่ -xในman bashกรณีที่ไม่ดีนักดังนั้นการขอความช่วยเหลือที่เฉพาะเจาะจงมากขึ้น: ถ้าคุณใช้/^\s+-x\b(= เริ่มต้นของบรรทัด + ช่องว่าง + -xขอบเขตคำ +) คุณได้ถูกหนึ่งใน 5 ฮิต ... มันจะเป็น 4 แต่สำหรับการxจับคู่ความจริงX... ซึ่งทำให้ผมคำถามที่ผมได้รับหมายที่จะถาม อย่างไรก็ตามหน้าคนส่วนใหญ่ที่มี^\s+-x\bรูปแบบควรจะลองใช้สวิตช์ก่อน
goldilocks

2

หน้าคนทุบตีไม่ได้บอกใบ้ว่าตัวเลือกเหล่านี้จะอธิบายเพิ่มเติมลงไปจริง ๆ แต่มันก็ถูกมองข้ามไปอย่างง่ายดาย

ดังนั้นปัญหาของคุณควรอ่านจริง: ส่วน OPTIONS ของหน้า bash man นั้นไม่สมบูรณ์ คำตอบคือการทำซ้ำพวกเขาหรือเน้นส่วนแรกของส่วนตัวเลือก:

OPTIONS
   All  of  the  single-character shell options documented in the descrip‐
   tion of the set builtin command can be used as options when  the  shell
   is invoked.  [ ... ]

สุดท้ายนี้เพื่อทำให้เสร็จสมบูรณ์: เป็นตัวเลือกมาตรฐานสำหรับ POSIX เชลล์สำหรับแสดงรหัสของสคริปต์เมื่ออ่าน ( -v) และเมื่อเรียกใช้ ( -x) เอาต์พุตจะปรากฏบน stderr

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