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

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

4
ฉันจะสะท้อนสัญญาณดอลลาร์ได้อย่างไร
ตัวอย่างเช่น$PATHและ$HOME เมื่อฉันพิมพ์echo $PATHมันจะส่งกลับของฉัน$PATHแต่ฉันต้องการที่จะสะท้อนคำ$PATHและไม่ใช่สิ่งที่ตัวแปรจริงหมายถึงecho "$PATH"ไม่ได้ทำงานอย่างใดอย่างหนึ่ง
67 shell  quoting 

3
วิธีรันไทม์บนหลายคำสั่งและเขียนเอาต์พุตเวลาไปยังไฟล์?
ฉันต้องการเรียกใช้timeคำสั่งเพื่อวัดเวลาของคำสั่งต่างๆ สิ่งที่ฉันต้องการจะทำคือ: วัดเวลาในการทำงานของพวกเขาทั้งหมดเข้าด้วยกัน เขียนtimeเอาต์พุตไปยังไฟล์ เขียนSTDERRจากคำสั่งที่ฉันวัดSTDERR สิ่งที่ฉันไม่ต้องการทำคือ เขียนคำสั่งต่าง ๆ ลงในสคริปต์แยกต่างหาก (เพราะเหตุใดเพราะทั้งหมดนี้เป็นสคริปต์ที่ฉันสร้างขึ้นมาโดยทางโปรแกรมแล้วและการสร้างสคริปต์ชั่วคราวอีกอันหนึ่งจะเป็นระเบียบมากกว่าที่ฉันต้องการ) สิ่งที่ฉันพยายาม: /usr/bin/time --output=outtime -p echo "a"; echo "b"; ใช้งานไม่ได้ทำงานtimeเฉพาะกับเครื่องแรกเท่านั้น /usr/bin/time --output=outtime -p ( echo "a"; echo "b"; ) ไม่ทำงาน(เป็นโทเค็นที่ไม่คาดคิด /usr/bin/time --output=outtime -p { echo "a"; echo "b"; } ไม่ทำงาน "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" /usr/bin/time --output=outtime -p ' echo "a"; echo "b";' ไม่ทำงาน "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" …

3
ทำไมการค้นหาของฉันจึงไม่เกิดซ้ำ
ฉันใช้คำสั่งต่อไปนี้ แต่ไม่ได้เรียกซ้ำ: find . -name *.java ฉันรู้ว่ามีไฟล์ java อยู่ข้างล่างในไดเรกทอรีปัจจุบัน แต่กำลังทำงานfindในไดเรกทอรีปัจจุบันเท่านั้น ฉันใช้ OS X, 10.9
65 shell  find  wildcards 

4
ใน bash เป็นไปได้ไหมที่จะใช้ตัวแปรจำนวนเต็มในการควบคุมลูปของ for for loop
ฉันมีสคริปต์ทุบตีต่อไปนี้: #!/bin/bash upperlim=10 for i in {0..10} do echo $i done for i in {0..$upperlim} do echo $i done การforวนซ้ำครั้งแรก( โดยไม่มีตัวแปรupperlimในการควบคุมการวนซ้ำ) ทำงานได้ดี แต่การforวนซ้ำครั้งที่สอง( ด้วยตัวแปรupperlimในการควบคุมการวนซ้ำ) ไม่ทำงาน มีวิธีใดบ้างที่ฉันสามารถแก้ไขforลูปที่สองเพื่อให้ทำงานได้? ขอบคุณที่สละเวลา.
65 bash  shell  shell-script  for 

4
สถิติแบบเรียกซ้ำในประเภทไฟล์ในไดเรกทอรี?
ฉันขูดเว็บไซต์สำหรับโครงการแปลง ฉันต้องการทำสถิติเกี่ยวกับประเภทของไฟล์ในนั้นเช่น 400 .htmlไฟล์ 100 ไฟล์.gifฯลฯ วิธีง่ายๆในการทำเช่นนี้คืออะไร? มันจะต้องเกิดซ้ำ แก้ไข:ด้วยสคริปต์ที่ maxschelpzig โพสต์ฉันมีปัญหาเนื่องจากสถาปัตยกรรมของเว็บไซต์ที่ฉันได้คัดลอกมา ไฟล์บางไฟล์เป็นชื่อที่*.php?blah=blah&foo=barมีอาร์กิวเมนต์ต่าง ๆ ดังนั้นจึงนับว่าเป็นไฟล์ที่ไม่ซ้ำกัน ดังนั้นการแก้ปัญหาจะต้องพิจารณาว่า*.php*เป็นประเภทเดียวกันทั้งหมดเพื่อที่จะพูด
65 shell  filenames 

6
ทรัพยากรสำหรับการเขียนโปรแกรมเชลล์แบบพกพา
มีทรัพยากรใดบ้างสำหรับการเขียนโปรแกรมเชลล์แบบพกพา คำตอบที่ดีที่สุดคือการทดสอบบนแพลตฟอร์มเป้าหมายทั้งหมด แต่ก็ไม่ค่อยมีประโยชน์ ข้อกำหนด POSIX / โสดยูนิกซ์เป็นจุดเริ่มต้น แต่มันจะบอกคุณว่าค่าระดับของการสนับสนุนของแต่ละการดำเนินการเป็นหรือส่วนขยายที่มีอยู่ทั่วไป คุณสามารถอ่านเอกสารประกอบของแต่ละการติดตั้งได้ แต่ใช้เวลานานและไม่แม่นยำอย่างสมบูรณ์ ฉันดูเหมือนว่ารูปแบบในอุดมคติจะเป็นข้อมูลจำเพาะ POSIX รุ่นที่มีคำอธิบายประกอบแบบชุมชนโดยที่แต่ละคุณลักษณะจะมีคำอธิบายประกอบตามระดับการสนับสนุนในการนำไปใช้งานที่แตกต่างกัน มีอะไรแบบนี้เหรอ? หรือมีทรัพยากรที่มีประโยชน์อื่น ๆ ตัวอย่างเช่นมีหน้าความสามารถในการพกพาของเชลล์ของ Sven Mascheckแต่เป็นเพียงเกี่ยวกับองค์ประกอบทางวากยสัมพันธ์และบิวด์อินสองสามตัวและครอบคลุมเฉพาะเชลล์เก่าเท่านั้น ฉันกำลังมองหาแหล่งข้อมูลที่ครอบคลุมมากขึ้น

5
วิธีการหลีกเลี่ยงคำพูดในเปลือก?
ฉันมีปัญหากับการหลบหนีตัวละครในทุบตี ฉันต้องการหลีกเลี่ยงคำพูดเดี่ยวและคู่ในขณะที่รันคำสั่งภายใต้ผู้ใช้อื่น สำหรับวัตถุประสงค์ของคำถามนี้สมมติว่าฉันต้องการที่จะสะท้อนต่อไปนี้บนหน้าจอ: 'single quote phrase' "double quote phrase" ฉันจะหลีกเลี่ยงตัวอักษรพิเศษทั้งหมดได้อย่างไรหากฉันต้องเปลี่ยนไปใช้ผู้ใช้อื่น: sudo su USER -c "echo \"'single quote phrase' \"double quote phrase\"\"" แน่นอนว่านี่ไม่ได้ผลลัพธ์ที่ถูกต้อง

7
วิธีอ่านบรรทัดแรกและบรรทัดสุดท้ายจากเอาต์พุต cat?
ฉันมีไฟล์ข้อความ งาน - รับบรรทัดแรกและบรรทัดสุดท้ายจากไฟล์หลังจาก $ cat file | grep -E "1|2|3|4" | commandtoprint $ cat file 1 2 3 4 5 ต้องการสิ่งนี้โดยไม่ต้องใช้เอาต์พุต cat (เพียง 1 และ 5) ~$ cat file | tee >(head -n 1) >(wc -l) 1 2 3 4 5 5 1 อาจจะมีวิธีแก้ปัญหาที่สั้นลงและสั้นลงกว่าเดิม ...
64 bash  shell  sed  awk  grep 

8
การแก้“ mv: รายการอาร์กิวเมนต์ยาวเกินไป” หรือไม่
ฉันมีโฟลเดอร์ที่มีไฟล์มากกว่าล้านไฟล์ที่ต้องการเรียงลำดับ แต่ฉันไม่สามารถทำอะไรได้เลยเพราะmvแสดงข้อความนี้ตลอดเวลา -bash: /bin/mv: Argument list too long ฉันใช้คำสั่งนี้เพื่อย้ายไฟล์ส่วนขยายที่น้อยกว่า: mv -- !(*.jpg|*.png|*.bmp) targetdir/
64 bash  shell  arguments  mv 

3
ฉันจะตรวจสอบว่าไฟล์เป็นลิงค์สัญลักษณ์ไปยังไดเรกทอรีได้อย่างไร?
ฉันสามารถตรวจสอบได้ว่ามีไฟล์อยู่หรือไม่และเป็นลิงก์สัญลักษณ์ที่มี -L for file in *; do if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi done และถ้ามันเป็นไดเรกทอรีที่มี -d: for file in *; do if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a …
64 bash  shell  test 

7
เชลล์สคริปต์ล้มเหลว: ข้อผิดพลาดทางไวยากรณ์:“ (” ไม่คาดคิด
ฉันทำงานกับสคริปต์ที่ตั้งค่าสภาพแวดล้อมการพัฒนาโดยอัตโนมัติสำหรับการพัฒนา Raspberry Pi (รายละเอียดทีละขั้นตอนที่ทำงานอยู่ที่นี่ ) สคริปต์ที่มีการเชื่อมโยงในบทความนั้น แต่ความสะดวกของคุณสามารถค้นหาได้ที่นี่ยัง ตอนนี้เมื่อรันสคริปต์นี้ติดตั้งและตั้งค่าสภาพแวดล้อมโดยไม่มีข้อผิดพลาด แต่คุณต้องป้อนรหัสผ่าน sudo ของคุณมากกว่าหนึ่งครั้งเนื่องจากค่าการหมดเวลาของ sudo โดยค่าเริ่มต้น ดังนั้นฉันเริ่มทดลองโดยลบบรรทัด sudo ทั้งหมดและรันสคริปต์ทั้งหมดผ่าน sudo ที่บรรทัดคำสั่งดังนี้: kemra102@ubuntuvm:~$ sudo ./pi_dev_env_install.sh วิธีนี้ใช้งานได้ตามที่คาดหวังและได้รับประโยชน์สูงสุดจนถึงจุดนี้: ./pi_dev_env_install: 68: ./pi_dev_env_install.sh: Syntax error: "(" unexpected ตอนนี้บรรทัดนี้ใช้งานได้ดีก่อนหน้านี้เมื่อไม่ได้เรียกใช้สคริปต์ทั้งหมดด้วย sudo ไม่มีอะไรเกี่ยวกับบรรทัดนี้ที่ทำงานเหมือน sudo ที่ควรหยุดทำงานกับความรู้ของฉันไม่มีใครมีความคิดบ้างไหม?


4
ทำไม `['เชลล์สร้างขึ้นในตัวและ` [[' คำสำคัญของเชลล์]
เท่าที่ฉันรู้[[เป็นรุ่นปรับปรุง[แต่ฉันสับสนเมื่อฉันเห็น[[ว่าเป็นคำหลักและ[ถูกแสดงเป็น builtin [root@server ~]# type [ [ is a shell builtin [root@server ~]# type [[ [[ is a shell keyword TLDPพูดว่า builtin อาจเป็นคำพ้องความหมายของคำสั่งระบบที่มีชื่อเดียวกัน แต่ Bash นำมาใช้ใหม่ภายใน ตัวอย่างเช่นคำสั่ง Bash echo ไม่เหมือนกับ / bin / echo แม้ว่าพฤติกรรมของพวกเขาจะเกือบเหมือนกัน และ คำหลักคือคำโทเค็นหรือตัวดำเนินการที่สงวนไว้ คำหลักมีความหมายพิเศษกับเชลล์และแน่นอนว่าเป็นหน่วยการสร้างของไวยากรณ์ของเชลล์ เป็นตัวอย่างสำหรับในขณะที่ทำและ! เป็นคำหลัก เช่นเดียวกับ builtin คีย์เวิร์ดนั้นยากที่จะเขียนลงใน Bash แต่ต่างจาก builtin คำสำคัญนั้นไม่ได้อยู่ในคำสั่ง แต่เป็นหน่วยย่อยของคำสั่งสร้าง [2] ไม่ควรที่จะทำให้ทั้งสอง[และ[[คำหลัก? …

2
การใช้งานร่วมกันได้หมายถึงอะไร
ฉันเคยเห็นคำว่า "sh Compatible" ที่ใช้โดยทั่วไปแล้วในการอ้างอิงถึง shells ฉันไม่แน่ใจว่ามันใช้กับโปรแกรมที่อาจถูกเรียกใช้จากภายใน shells หรือไม่ เชลล์หรือโปรแกรมอื่นมีความหมายว่าอะไร "sh Compatible" การที่ "ขัดกันไม่ได้" หมายความว่าอย่างไร? แก้ไข: คำถามนี้ถามความแตกต่างระหว่าง bash และ sh เกี่ยวข้องกันมาก: ความแตกต่างระหว่าง sh และ bash ฉันยังต้องการคำตอบโดยตรงกับความหมายของคำว่า "เข้ากันได้กับ sh" ความคาดหวังที่สมเหตุสมผลอาจเป็นได้ว่า "sh Compatible" หมายถึง "ใช้ภาษาคำสั่งของเชลล์" แต่ทำไมจึงมีเชลล์ "sh ที่เข้ากันได้" จำนวนมากและทำไมมันถึงแตกต่างกัน?

8
จะทำไพพ์สองทิศทางระหว่างสองโปรแกรมได้อย่างไร
ทุกคนรู้วิธีที่จะทำให้ท่อทิศทางเดียวระหว่างสองโปรแกรม (ผูกstdoutหนึ่งครั้งแรกและครั้งที่สองอย่างใดอย่างหนึ่ง):stdinfirst | second แต่จะทำไพพ์สองทิศทางคือ cross-bind stdinและstdoutสองโปรแกรมได้อย่างไร มีวิธีง่าย ๆ ในการทำเชลล์หรือไม่?
63 shell  pipe 

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