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

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

2
sudo: ไม่สามารถเรียกใช้. /script.sh: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
ฉันนิ่งงัน ฉันมีสคริปต์ใน/homeไดเรกทอรีซึ่งสามารถใช้งานได้: [user@server ~]$ ll total 4 -rwx------ 1 user user 2608 Jul 15 18:23 qa.sh อย่างไรก็ตามเมื่อฉันพยายามเรียกใช้โดยแจ้งsudoว่าไม่พบ: [user@server ~]$ sudo ./qa.sh [sudo] password for user: sudo: unable to execute ./qa.sh: No such file or directory นี่คือการสร้างใหม่ ไม่มีการเปลี่ยนแปลงใด ๆ ที่จะทำให้เกิดปัญหา ในความเป็นจริงจุดของสคริปต์คือเพื่อให้แน่ใจว่ามันถูกสร้างขึ้นจริงตามนโยบายของเรา อาจเป็นไปไม่ได้และsudoกำลังถูกทำลายในระหว่างการสร้าง ฉันควรทราบด้วยว่าฉันสามารถเรียกใช้sudoคำสั่งอื่นในไดเรกทอรีอื่นได้ แก้ไข: สคริปต์ (ฉันไม่ได้เขียนดังนั้นอย่า/bin/bashให้ฉันมากกว่านั้นโปรด;)) #! /bin/bash . /root/.bash_profile customer=$1 …



5
วิธีอ่านจากสองไฟล์อินพุตที่ใช้ขณะลูป
ฉันต้องการทราบว่ามีวิธีการอ่านใด ๆ จากไฟล์อินพุตสองไฟล์ในแบบซ้อนในขณะที่วนรอบทีละหนึ่งบรรทัด ยกตัวอย่างเช่นช่วยบอกฉันมีสองไฟล์และFileAFileB FileA: [jaypal:~/Temp] cat filea this is File A line1 this is File A line2 this is File A line3 FileB: [jaypal:~/Temp] cat fileb this is File B line1 this is File B line2 this is File B line3 สคริปต์ตัวอย่างปัจจุบัน: [jaypal:~/Temp] cat read.sh #!/bin/bash while read lineA …

3
วิธีการจัดเรียงสตริงที่รวมกับสตริง + ตัวเลขโดยใช้สคริปต์ทุบตี?
นี่คือข้อมูลที่ฉันต้องการเรียงลำดับ แต่sortปฏิบัติต่อตัวเลขกับสตริงข้อมูลที่ไม่เรียงตามที่ฉันคาดไว้ / home / files / profile1 / home / files / profile10 / home / files / profile11 / home / files / profile12 / home / files / profile14 / home / files / profile15 / home / files / profile16 / home / files / profile2 …

8
การขยายท่อการเลื่อนหรือการเพิ่มประสิทธิภาพมีประสิทธิภาพมากขึ้นหรือไม่?
ฉันกำลังพยายามหาวิธีที่มีประสิทธิภาพมากที่สุดในการวนซ้ำค่าบางค่าซึ่งเป็นค่าที่สอดคล้องกันซึ่งอยู่ห่างกันในรายการคำที่คั่นด้วยช่องว่าง (ฉันไม่ต้องการใช้อาร์เรย์) ตัวอย่างเช่น, list="1 ant bat 5 cat dingo 6 emu fish 9 gecko hare 15 i j" ดังนั้นฉันต้องการที่จะสามารถวนซ้ำในรายการและเข้าถึง 1,5,6,9 และ 15 เท่านั้น แก้ไข:ฉันควรทำให้ชัดเจนว่าค่าที่ฉันพยายามรับจากรายการไม่ต้องแตกต่างในรูปแบบจากส่วนที่เหลือของรายการ สิ่งที่ทำให้พวกเขาพิเศษเป็นเพียงตำแหน่งของพวกเขาในรายการ (ในกรณีนี้ตำแหน่ง 1,4,7 ... ) ดังนั้นรายการอาจเป็นได้1 2 3 5 9 8 6 90 84 9 3 2 15 75 55แต่ฉันยังต้องการหมายเลขเดิม และฉันต้องการที่จะทำมันโดยสมมติว่าฉันไม่รู้ความยาวของรายการ วิธีการที่ฉันเคยคิดคือ: วิธีที่ 1 set $list …

1
หาก“ bash <file>” ใช้งานได้เหตุใด“ แหล่งที่มา <file>” จึงเกิดข้อผิดพลาดขึ้น
ฉันมีสคริปต์ต่อไปนี้: #!/bin/bash set -x if :; then echo a fi ถ้าผมทำงานbash /tmp/file, aสะท้อน แต่ถ้าผมทำงานsource /tmp/fileผมจะได้รับ: bash: /tmp/test: line 6: syntax error: unexpected end of file ผลลัพธ์: knezi@holly tmp]$set -x; source /tmp/test; set +x + source /tmp/test ++ set -x bash: /tmp/test: line 6: syntax error: unexpected end of file + …

6
ฉันจะเผยแพร่คีย์ SSH ของฉันไปยังรายการเซิร์ฟเวอร์ได้อย่างไรโดยไม่ต้องพิมพ์รหัสผ่านซ้ำแล้วซ้ำอีก?
เมื่อเร็ว ๆ นี้ฉันได้รับชื่อผู้ใช้ / รหัสผ่านเพื่อเข้าถึงรายการเซิร์ฟเวอร์และต้องการเผยแพร่รหัสสาธารณะ SSH ของฉันไปยังเซิร์ฟเวอร์เหล่านี้เพื่อให้ฉันสามารถเข้าสู่ระบบได้ง่ายขึ้น เพื่อให้ชัดเจน: ไม่มีคีย์สาธารณะที่มีอยู่แล้วบนเซิร์ฟเวอร์ระยะไกลที่ฉันสามารถใช้เพื่อทำสิ่งนี้โดยอัตโนมัติ นี่ถือเป็นครั้งแรกที่ฉันเข้าสู่เซิร์ฟเวอร์เหล่านี้และฉันไม่ต้องการพิมพ์ข้อมูลประจำตัวของฉันในการเข้าถึงพวกเขา ฉันไม่ต้องการพิมพ์รหัสผ่านของฉันซ้ำแล้วซ้ำอีกโดยใช้ssh-copy-idใน for for loop

7
ควรสคริปต์ที่ต้องใช้ sudo ล้มเหลวหากไม่มีหรือใช้ sudo และพรอมต์?
ฉันมีสคริปต์ที่ให้การควบคุมความสว่างแบ็คไลท์ของฉันอย่างละเอียดและต้องsudoดำเนินการ เป็นหลักนี้: backlight="/sys/class/backlight/acpi_video0/brightness" echo $1 | tee $backlight ~/bin/backlight-adjustและชีวิตที่ สคริปต์ต้องการsudoสิทธิ์เนื่องจากtee $backlightกำลังเขียนไปยังตำแหน่งที่มีสิทธิ์ sudoดังนั้นมันจะล้มเหลวถ้ามันไม่ได้ทำงานด้วย วิธีการนี้มีปัญหาเพราะฉันไม่สามารถวิ่งsudo backlight-adjustได้เพราะ~/binไม่ได้อยู่$PATHในsudoสภาพแวดล้อม แต่ในสภาพแวดล้อมของฉันเท่านั้น ดังนั้นฉันต้องวิ่งsudo env "PATH=$PATH" backlight-adjustหรืออะไรทำนองนั้น หรือฉันอาจจะเขียนมันแบบนี้ backlight="/sys/class/backlight/acpi_video0/brightness" echo $1 | sudo tee $backlight และแจ้งรหัสผ่านให้ฉัน วิธีที่สองใช้งานได้ดีกว่าสำหรับฉันเพราะฉันไม่ต้องจำให้พิมพ์ sudo; มันจะทำให้ฉัน และฉันสามารถรักษา$PATHเหมือนเดิม โดยรวมแล้วรู้สึกสะดวกกว่า แต่มีเหตุผลใดที่ฉันไม่ควรทำอย่างที่สอง? (ฉันใช้ Xubuntu 14.04 และเชลล์ของฉันคือ GNU ทุบตี 4.2.45 ถ้านั่นสร้างความแตกต่าง)

6
เชื่อมหลายไฟล์เข้าด้วยกันด้วยส่วนหัวเดียวกัน
ฉันมีหลายไฟล์ที่มีส่วนหัวเดียวกันและเวกเตอร์ต่างกันด้านล่าง ฉันต้องต่อกันทั้งหมด แต่ฉันต้องการเฉพาะส่วนหัวของไฟล์แรกที่จะต่อกันและฉันไม่ต้องการให้ส่วนหัวอื่นถูกต่อกันเนื่องจากมันเหมือนกันทั้งหมด ตัวอย่างเช่น: file1.txt &lt;header&gt;INFO=&lt;ID=DP,Number=1,Type=Integer&gt; &lt;header&gt;INFO=&lt;ID=DP4,Number=4,Type=Integer&gt; A B C file2.txt &lt;header&gt;INFO=&lt;ID=DP,Number=1,Type=Integer&gt; &lt;header&gt;INFO=&lt;ID=DP4,Number=4,Type=Integer&gt; D E F ฉันต้องการผลลัพธ์ที่จะเป็น &lt;header&gt;INFO=&lt;ID=DP,Number=1,Type=Integer&gt; &lt;header&gt;INFO=&lt;ID=DP4,Number=4,Type=Integer&gt; A B C D E F ฉันสามารถเขียนสคริปต์ใน R แต่ฉันต้องการมันในเปลือก?


5
Shell Scripting: วิธีที่เหมาะสมในการตรวจสอบการเชื่อมต่ออินเทอร์เน็ต?
ฉันพบสคริปต์ที่บอกว่าพวกเขาตรวจสอบการเชื่อมต่ออินเทอร์เน็ต บางคนตรวจสอบที่อยู่ IP หากอินเทอร์เฟซไม่ทำงาน แต่ไม่ได้ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต ฉันพบบางอย่างที่ใช้ ping ดังนี้: if [ 'ping google.com -c 4 | grep time' != "" ]; thenแต่บางครั้งสิ่งนี้อาจไม่น่าเชื่อถือเนื่องจาก ping อาจแขวนด้วยเหตุผลบางอย่าง (เช่นกำลังรอ IO ค้างอยู่) มีข้อเสนอแนะเกี่ยวกับวิธีที่เหมาะสม / น่าเชื่อถือในการตรวจสอบการเชื่อมต่ออินเทอร์เน็ตโดยใช้สคริปต์หรือไม่? ฉันต้องใช้แพ็คเกจบางอย่างหรือไม่? มันจำเป็นต้องสามารถตรวจสอบเป็นระยะ ๆcronจากนั้นทำบางสิ่งบางอย่างเมื่อการเชื่อมต่อลดลงเช่นเรียกใช้ifup --force [interface]

8
ใช้ไฟล์ config สำหรับเชลล์สคริปต์ของฉัน
ฉันต้องการสร้างไฟล์ปรับแต่งสำหรับสคริปต์ของตัวเอง: นี่เป็นตัวอย่าง: สคริปต์: #!/bin/bash source /home/myuser/test/config echo "Name=$nam" &gt;&amp;2 echo "Surname=$sur" &gt;&amp;2 เนื้อหาของ/home/myuser/test/config: nam="Mark" sur="Brown" นั่นเป็นผลงาน! คำถามของฉัน: นี่เป็นวิธีที่ถูกต้องในการทำเช่นนี้หรือมีวิธีอื่นหรือไม่?

6
วิธีเพิ่มตัวแปรทางคณิตศาสตร์ในสคริปต์
ฉันต้องการสะสมขนาดบรรทัดของไฟล์จำนวนหนึ่งที่มีอยู่ในโฟลเดอร์ ฉันได้เขียนสคริปต์ต่อไปนี้: let a=0 let num=0 for i in folder/* do num=`cat $i | wc -l` a=$a+$num done echo $a สิ่งที่ฉันได้รับในตอนท้ายของสคริปต์คือ 123 + 234 + 432 + ... และไม่ใช่ผลลัพธ์ของการดำเนินการทางคณิตศาสตร์ของการเพิ่ม

5
วิธีรับส่วนสุดท้ายของลิงค์ http ใน Bash
ฉันมีลิงค์ http: http://www.test.com/abc/def/efg/file.jar และฉันต้องการบันทึกส่วนสุดท้าย file.jar เป็นตัวแปรดังนั้นสตริงเอาต์พุตคือ "file.jar" เงื่อนไข : ลิงค์มีความยาวต่างกันเช่น: http://www.test.com/abc/def/file.jar. ฉันลองแบบนั้น: awk -F'/' '{print $7}' แต่ปัญหาคือความยาวของ URL ดังนั้นฉันต้องการคำสั่งที่สามารถใช้สำหรับความยาว URL ใด ๆ
25 bash  shell-script  awk  cut 

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