คำถามติดแท็ก shell-script

คำถามเกี่ยวกับเชลล์สคริปต์ไฟล์เรียกทำงานที่ตีความโดยเชลล์ (bash, zsh ฯลฯ )

7
นามสกุลไฟล์สำหรับสคริปต์เชลล์ยูนิกซ์ [ปิด]
บนวิกิพีเดียบทความสำหรับ. shพูดว่า: สำหรับชนิดของไฟล์นามสกุล .sh ดูเปลือกบอร์น หอยยูนิกซ์อื่น ๆ ล่ะ? ฉันรู้ว่าshebang ถูกนำมาใช้ภายในไฟล์เพื่อระบุล่ามสำหรับการดำเนินการ แต่ผมสงสัยว่า: ข้อดีและข้อเสียของไฟล์นามสกุลคืออะไรและไม่มีนามสกุลไฟล์?

7
ลำไส้ใหญ่ภายในมีจุดประสงค์อะไร
ฉันแฮ็คสคริปต์เชลล์จำนวนมากและบางครั้งสิ่งที่ง่ายที่สุดก็ทำให้ฉันยุ่งเหยิง วันนี้ฉันพบสคริปต์ที่ใช้:ทุบตี (โคลอน) builtin อย่างกว้างขวาง Documenationดูเหมือนว่าพอง่าย: : (a colon) : [arguments] อย่าทำอะไรเลยนอกเหนือจากการขยายข้อโต้แย้งและทำการเปลี่ยนเส้นทาง สถานะการส่งคืนเป็นศูนย์ อย่างไรก็ตามก่อนหน้านี้ฉันเคยเห็นสิ่งนี้ใช้ในการสาธิตการขยายตัวของเชลล์ กรณีการใช้งานในสคริปต์ที่ฉันวิ่งข้ามได้ใช้โครงสร้างนี้อย่างกว้างขวาง: if [ -f ${file} ]; then grep some_string ${file} >> otherfile || : grep other_string ${file} >> otherfile || : fi จริง ๆ แล้วมีหลายร้อย greps แต่พวกเขาก็เหมือนกัน ไม่มีการเปลี่ยนทิศทางอินพุต / เอาต์พุตนอกเหนือจากโครงสร้างอย่างง่ายด้านบน ไม่มีการตรวจสอบค่าส่งคืนในสคริปต์ ฉันกำลังอ่านสิ่งนี้เป็นสิ่งก่อสร้างที่ไร้ประโยชน์ที่ระบุว่า "หรือไม่ทำอะไรเลย" มีจุดประสงค์อะไรที่จะจบ greps เหล่านี้ด้วย …

8
วิธีต่างๆในการเรียกใช้งานเชลล์สคริปต์
มีหลายวิธีในการรันสคริปต์สิ่งที่ฉันรู้คือ: /path/to/script # using the path (absolute or relative) . script # using the . (dot) source script # using the `source` command เป็นมากกว่านี้หรือไม่ ความแตกต่างระหว่างพวกเขาคืออะไร? มีสถานการณ์ที่ฉันต้องใช้อย่างอื่นหรือไม่?

10
ตรวจสอบว่าโฟลเดอร์เป็นระบบไฟล์รีโมตที่เมาท์หรือไม่
เป็นวิธีที่ดีที่สุด (เชื่อถือได้พกพา ฯลฯ ) เพื่อตรวจสอบว่าโฟลเดอร์ที่กำหนดอยู่ในระบบไฟล์ระยะไกลติดตั้ง (NFS) ภายในเปลือกสคริปต์คืออะไร? ฉันกำลังมองหาคำสั่งที่จะมีลักษณะ: chk-remote-mountpoint /my/path/to/folder

3
วิธีการเพิ่ม / ลบองค์ประกอบไปยัง / จากอาร์เรย์ในทุบตี?
ฉันมีอาร์เรย์ที่มีองค์ประกอบบางอย่าง แต่ฉันต้องการผลักดันรายการใหม่ไปยังจุดเริ่มต้นของอาร์เรย์ ฉันจะทำอย่างไร

2
ใน bash scripting อะไรคือความแตกต่างระหว่างการประกาศและตัวแปรปกติ?
ในการทุบตีสคริปต์: เราสร้างตัวแปรโดยการตั้งชื่อ: abc=ok หรือเราสามารถใช้ declare declare abc=ok ความแตกต่างคืออะไร และทำไมทุบตีทำหลายวิธีในการสร้างตัวแปร?



6
วิธีส่งแต่ละบรรทัดของไฟล์ข้อความเป็นอาร์กิวเมนต์ไปยังคำสั่ง?
ฉันต้องการเขียนสคริปต์ที่ใช้.txtชื่อไฟล์เป็นอาร์กิวเมนต์อ่านไฟล์ทีละบรรทัดและส่งแต่ละบรรทัดไปยังคำสั่ง ตัวอย่างเช่นมันทำงานcommand --option "LINE 1"แล้วcommand --option "LINE 2"ฯลฯ เอาท์พุทของคำสั่งจะถูกเขียนไปยังไฟล์อื่น ฉันจะทำเช่นนั้นได้อย่างไร ฉันไม่รู้ว่าจะเริ่มจากตรงไหน

1
มีคำสั่งมาตรฐานที่มักจะออกมาพร้อมกับความล้มเหลวหรือไม่?
ฉันต้องการทดสอบสคริปต์ด้วยคำสั่งที่ล้มเหลว ฉันสามารถใช้คำสั่งที่มีอยู่ด้วยข้อโต้แย้งที่ไม่ดี ฉันยังสามารถเขียนสคริปต์ง่าย ๆ ที่ออกโดยทันทีด้วยความล้มเหลว ทั้งสองอย่างนี้ทำได้ง่ายและทำงานให้ฉัน แต่ถ้ามีคำสั่งมาตรฐานสำหรับวัตถุประสงค์นี้ฉันต้องการใช้สิ่งนั้นแทน

3
วิธีรวบรวมอาร์เรย์ของเส้นอย่างถูกต้องใน zsh
ฉันคิดว่าต่อไปนี้จะจัดกลุ่มผลลัพธ์ของmy_commandอาร์เรย์หลายบรรทัด: IFS='\n' array_of_lines=$(my_command); ดังนั้น$array_of_lines[1]จะหมายถึงบรรทัดแรกในผลลัพธ์ของmy_command, $array_of_lines[2]ถึงวินาทีและอื่น ๆ อย่างไรก็ตามคำสั่งด้านบนนั้นใช้งานไม่ได้ ดูเหมือนว่าจะแยกเอาท์พุทของmy_commandตัวละครรอบตัวnออกไปตามที่ฉันได้ตรวจสอบด้วยprint -l $array_of_linesซึ่งฉันเชื่อว่ามันจะพิมพ์องค์ประกอบของอาเรย์ทีละบรรทัด ฉันได้ตรวจสอบสิ่งนี้ด้วย: echo $array_of_lines[1] echo $array_of_lines[2] ... ในความพยายามครั้งที่สองฉันคิดว่าการเพิ่มevalจะช่วยได้: IFS='\n' array_of_lines=$(eval my_command); แต่ฉันได้ผลลัพธ์เหมือนกันทุกประการ ในที่สุดต่อไปนี้คำตอบเกี่ยวกับองค์ประกอบของรายการที่มีช่องว่างใน zshฉันยังได้ลองใช้การตั้งค่าสถานะการขยายพารามิเตอร์แทนที่จะIFSบอก zsh วิธีการแยกอินพุตและรวบรวมองค์ประกอบเป็นอาร์เรย์เช่น: array_of_lines=("${(@f)$(my_command)}"); แต่ฉันยังคงได้รับผลลัพธ์เดียวกัน (แยกเกิดขึ้นn) ด้วยสิ่งนี้ฉันมีคำถามต่อไปนี้: ไตรมาสที่ 1 อะไรคือ"วิธีการที่เหมาะสม"ในการรวบรวมเอาต์พุตของคำสั่งในอาร์เรย์ของบรรทัด? ไตรมาสที่ 2 ฉันIFSจะระบุให้แยกบรรทัดใหม่ได้อย่างไร ไตรมาสที่ 3 หากฉันใช้การตั้งค่าสถานะการขยายพารามิเตอร์เช่นเดียวกับในความพยายามครั้งที่สามของฉันข้างต้น (เช่นการใช้@f) เพื่อระบุการแยก zsh จะละเว้นค่าเป็นIFSหรือไม่? ทำไมมันไม่ทำงานด้านบน
42 shell-script  zsh 

4
อะไรคือความแตกต่างระหว่างการเรียกใช้ "bash script.sh" และ "./script.sh"
ถ้า script.sh เป็นอะไรที่เหมือน ๆ กัน #!/bin/bash echo "Hello World!" มีวิธีที่ต้องการเรียกใช้สคริปต์หรือไม่ ฉันคิดว่าคุณต้อง chmod ก่อนดังนั้นมันจึงเป็นปฏิบัติการ?

4
การค้นหาไฟล์ที่ใหญ่ที่สุดแบบเรียกซ้ำ
ฉันพยายามค้นหาไฟล์ที่ใหญ่ที่สุดในไดเรกทอรีแบบเรียกซ้ำ หากมีไดเรกทอรีย่อยในไดเรกทอรีนั้นฟังก์ชันนั้นจะต้องเข้าไปข้างในไดเรกทอรีนั้นและตรวจสอบว่ามีไฟล์ที่ใหญ่ที่สุดหรือไม่ เมื่อพบไฟล์ที่ใหญ่ที่สุดเอาต์พุตจะถูกแสดงด้วยชื่อพา ธ สัมพัทธ์และชื่อและขนาดของไฟล์ที่ใหญ่ที่สุด EX: dude@shell2 (~...assignment/solutions) % bash maxfile.sh ~/test class/asn dude.h.gch: 9481628 นี่คือสิ่งที่ฉันมี: #!/bin/sh clear recursiveS() { for d in *; do if [ -d $d ]; then (cd $d; echo $(pwd)/$line; du -a; recursiveS;) fi done } recursiveS ฉันติดขัดอยู่พักหนึ่งแล้ว ฉันไม่สามารถใช้สิ่งนี้ได้โดยการวางท่อจำนวนเครื่องมือ Unix ที่มีอยู่ ความคิดใด ๆ จะดี!

5
วิธีรับ HOME ให้ USER
ฉันมีUSERตัวแปรในสคริปต์ของฉันและฉันต้องการดูHOMEเส้นทางของเขาตามUSERตัวแปร ฉันจะทำสิ่งนั้นได้อย่างไร

3
ตัวแปรเป็นคำสั่ง; eval vs bash -c
ฉันกำลังอ่านสคริปต์ทุบตีคนทำและฉันสังเกตเห็นว่าผู้เขียนไม่ได้ใช้ eval เพื่อประเมินตัวแปรเป็นคำสั่ง ผู้เขียนใช้ bash -c "$1" แทน eval "$1" ฉันถือว่าการใช้ eval เป็นวิธีที่ต้องการและอาจเร็วกว่าอยู่ดี มันเป็นเรื่องจริงเหรอ? มีความแตกต่างในทางปฏิบัติระหว่างทั้งสองหรือไม่? อะไรคือความแตกต่างที่โดดเด่นระหว่างสองสิ่งนี้?

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