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

sh เป็นเชลล์ Unix มาตรฐานตั้งแต่เวอร์ชัน 7 Unix POSIX มีลักษณะการทำงานของเชลล์ที่เป็นมาตรฐานตาม Bourne Shell และสคริปต์เชลล์แบบพกพาควรเป็นไปตามไวยากรณ์ที่เป็นมาตรฐาน ใช้แท็กนี้สำหรับคำถามที่ใช้กับเชลล์สไตล์ Bourne / POSIX สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

4
ไวยากรณ์หลายบรรทัดสำหรับการวางท่อ heredoc; พกพาได้ไหม
ฉันคุ้นเคยกับไวยากรณ์นี้: cmd1 << EOF | cmd2 text EOF แต่เพิ่งค้นพบว่า bash ช่วยให้ฉันเขียน: cmd1 << EOF | text EOF cmd2 (heredoc ใช้เป็นอินพุตไปยัง cmd1 และเอาต์พุตของ cmd1 จะถูกส่งไปยัง cmd2) นี่ดูเหมือนไวยากรณ์ที่แปลกมาก พกพาได้ไหม
132 bash  shell  pipe  sh  heredoc 

8
จะเรียกใช้. sh บนพรอมต์คำสั่งของ Windows ได้อย่างไร
ฉันจะเรียกใช้. sh บนพรอมต์คำสั่งของ Windows 7 ได้อย่างไร ฉันมักจะได้รับข้อผิดพลาดนี้เสมอเมื่อพยายามเรียกใช้บรรทัดนี้ app/build/build.sh ข้อผิดพลาด 'app' is not recognized... หรือ, bash app/build/build.sh ข้อผิดพลาด 'bash' is not recognized... มีความคิดอะไรที่ฉันพลาดไป? ที่นี่คว้าหน้าจอ
132 windows  bash  command-line  sh 

9
การลบบรรทัดจากไฟล์หนึ่งซึ่งอยู่ในไฟล์อื่น
ฉันมีไฟล์f1: line1 line2 line3 line4 .. .. ฉันต้องการลบบรรทัดทั้งหมดที่อยู่ในไฟล์อื่นf2: line2 line8 .. .. ฉันได้ลองทำอะไรบางอย่างcatและsedไม่ได้ใกล้เคียงกับที่ฉันตั้งใจ ฉันจะทำเช่นนี้ได้อย่างไร?
126 bash  scripting  sh 

11
ลบเส้นทางที่ซ้ำซ้อนออกจากตัวแปร $ PATH
ฉันได้กำหนดเส้นทางเดียวกันในตัวแปร $ PATH 6 ครั้ง ฉันไม่ได้ออกจากระบบเพื่อตรวจสอบว่าใช้งานได้หรือไม่ ฉันจะลบรายการที่ซ้ำกันได้อย่างไร ตัวแปร $ PATH มีลักษณะดังนี้: echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin ฉันจะรีเซ็ตเป็นเพียงแค่ /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

7
นับจำนวนอักขระที่เกิดขึ้นในสตริงโดยใช้ Bash
ฉันต้องการนับจำนวนครั้งที่เกิดขึ้นของอักขระในสตริงโดยใช้ Bash ในตัวอย่างต่อไปเมื่อถ่านคือ (ตัวอย่าง) tมันechosหมายเลขที่ถูกต้องของการเกิดขึ้นของtในvarแต่เมื่อตัวอักษรเป็นเครื่องหมายจุลภาคหรืออัฒภาคก็พิมพ์ออกศูนย์: var = "text,text,text,text" num = `expr match $var [,]` echo "$num"
124 bash  shell  sh 


8
วิธีเรียกใช้คำสั่งในพื้นหลังและไม่ได้รับผลลัพธ์
ฉันเขียนสองเชลล์สคริปต์a.shและb.sh. ในa.shและb.shฉันมีอนันต์สำหรับลูปและพวกเขาพิมพ์เอาต์พุตบางส่วนไปยังเทอร์มินัล ฉันต้องการเขียนสคริปต์อื่นที่เรียกใช้ทั้งสองa.shและb.shแต่ฉันต้องการให้ผู้ใช้กลับมาควบคุมเทอร์มินัลทันทีแทนที่จะให้สคริปต์ทำงานไม่สิ้นสุดและฉันต้องการซ่อนเอาต์พุตในเทอร์มินัล

2
หมายความว่าอย่างไรในเชลล์เมื่อเราใส่คำสั่งไว้ในเครื่องหมายดอลลาร์และวงเล็บ: $ (คำสั่ง)
ฉันแค่ต้องการเข้าใจบรรทัดของโค้ดต่อไปนี้ในเชลล์ ใช้เพื่อรับไดเร็กทอรีการทำงานปัจจุบัน ฉันทราบว่า$(variable)ชื่อส่งคืนค่าภายในชื่อตัวแปร แต่$(command)ควรส่งคืนอะไร มันคืนค่าหลังจากรันคำสั่งหรือไม่? ในกรณีนั้นเราสามารถใช้`เพื่อดำเนินการคำสั่ง CWD="$(cd "$(dirname $0)"; pwd)" ผลลัพธ์เดียวกันสามารถนำมาจากบรรทัดของโค้ดต่อไปนี้และในเชลล์เวอร์ชันอื่น DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ฉันไม่สามารถเข้าใจความหมายของและ$(cd..$(dirname ใครช่วยฉันคิดว่าคำสั่งนี้ดำเนินการอย่างไร
111 bash  shell  terminal  sh  ksh 

7
ฉันเพิ่งกำหนดตัวแปร แต่ตัวแปร echo $ แสดงอย่างอื่น
ต่อไปนี้เป็นชุดกรณีที่echo $varสามารถแสดงค่าที่แตกต่างจากที่เพิ่งกำหนดได้ สิ่งนี้จะเกิดขึ้นไม่ว่าค่าที่กำหนดจะเป็น "double quoted" "single quoted" หรือไม่มีเครื่องหมายคำพูด ฉันจะทำให้เชลล์ตั้งค่าตัวแปรได้อย่างถูกต้องได้อย่างไร ดอกจัน ผลลัพธ์ที่คาดหวังคือ/* Foobar is free software */แต่ฉันได้รับรายชื่อไฟล์แทน: $ var="/* Foobar is free software */" $ echo $var /bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ... วงเล็บเหลี่ยม ค่าที่คาดหวังคือ[a-z]แต่บางครั้งฉันก็ได้อักษรตัวเดียวแทน! $ var=[a-z] $ echo $var c ฟีดบรรทัด (บรรทัดใหม่) ค่าที่คาดหวังคือรายการของบรรทัดที่แยกจากกัน …
109 bash  shell  sh  quoting 

4
วิธี cat << EOF >> ไฟล์ที่มีรหัส?
ฉันต้องการพิมพ์รหัสลงในไฟล์โดยใช้cat &lt;&lt;EOF &gt;&gt;: cat &lt;&lt;EOF &gt;&gt; brightup.sh !/bin/bash curr=`cat /sys/class/backlight/intel_backlight/actual_brightness` if [ $curr -lt 4477 ]; then curr=$((curr+406)); echo $curr &gt; /sys/class/backlight/intel_backlight/brightness; fi EOF แต่เมื่อฉันตรวจสอบผลลัพธ์ของไฟล์ฉันจะได้รับสิ่งนี้: !/bin/bash curr=1634 if [ -lt 4477 ]; then curr=406; echo &gt; /sys/class/backlight/intel_backlight/brightness; fi ฉันพยายามใส่เครื่องหมายคำพูดเดี่ยว แต่ผลลัพธ์ก็มีเครื่องหมายคำพูดเดี่ยวด้วย ฉันจะหลีกเลี่ยงปัญหานี้ได้อย่างไร
108 linux  unix  sh  heredoc 

12
งาน Cron และเวลาสุ่มภายในไม่กี่ชั่วโมง
ฉันต้องการความสามารถในการเรียกใช้สคริปต์ PHP 20 ครั้งต่อวันในเวลาสุ่มอย่างสมบูรณ์ ฉันยังต้องการให้มันทำงานระหว่าง 9.00 น. - 23.00 น. เท่านั้น ฉันคุ้นเคยกับการสร้างงาน cron ใน linux
103 bash  cron  sh 

10
รับบรรทัดเฉพาะจากไฟล์ข้อความโดยใช้เชลล์สคริปต์
ฉันกำลังพยายามหาบรรทัดเฉพาะจากไฟล์ข้อความ จนถึงตอนนี้ออนไลน์ฉันได้เห็นสิ่งต่างๆเช่น sed เท่านั้น (ฉันสามารถใช้ sh -not bash หรือ sed หรืออะไรก็ได้แบบนั้น) ฉันต้องทำสิ่งนี้โดยใช้เชลล์สคริปต์พื้นฐานเท่านั้น cat file | while read line do #do something done ฉันรู้วิธีการวนซ้ำตามบรรทัดดังที่แสดงด้านบน แต่ถ้าฉันต้องการรับเนื้อหาของบรรทัดใดบรรทัดหนึ่ง
101 linux  shell  unix  sh 

2
ไปข้างหน้าการประกาศฟังก์ชันใน Bash หรือเชลล์สคริปต์?
มีสิ่งนั้นในbashหรืออย่างน้อยก็มีบางอย่างที่คล้ายกัน (วิธีแก้ปัญหา) เช่นการประกาศล่วงหน้าที่รู้จักกันดีใน C / C ++ หรือไม่? หรือมีสิ่งนั้นเพราะตัวอย่างเช่นมันถูกดำเนินการในครั้งเดียวเสมอ (บรรทัดหลังบรรทัด)? หากไม่มีการประกาศล่วงหน้าฉันควรทำอย่างไรเพื่อให้สคริปต์อ่านง่ายขึ้น ค่อนข้างยาวและคำจำกัดความของฟังก์ชันเหล่านี้ในตอนต้นผสมกับตัวแปรส่วนกลางทำให้สคริปต์ของฉันดูน่าเกลียดและอ่าน / เข้าใจยาก)? ฉันขอให้เรียนรู้แนวทางปฏิบัติที่เป็นที่รู้จัก / ดีที่สุดสำหรับกรณีดังกล่าว ตัวอย่างเช่น: # something like forward declaration function func # execution of the function func # definition of func function func { echo 123 }

5
envsubst: ไม่พบคำสั่งบน Mac OS X 10.8
เมื่อฉันพยายามเรียกใช้สคริปต์ที่มีคำสั่ง envsubst ฉันได้รับข้อผิดพลาดนี้ เมื่อดูทางออนไลน์ดูเหมือนว่าจะเป็นคำสั่ง bash มาตรฐานดังนั้นฉันไม่แน่ใจว่าจะติดตั้งอะไรเพื่อให้มันใช้งานได้

6
ไฟล์. sh คืออะไร
ดังนั้นฉันจึงไม่มีประสบการณ์ในการจัดการกับไฟล์ประเภทต่างๆมากมายและฉันไม่สามารถหาข้อมูลได้มากนักว่า.shไฟล์คืออะไร นี่คือสิ่งที่ฉันพยายามทำ: ฉันกำลังพยายามดาวน์โหลดชุดข้อมูลแผนที่ซึ่งจัดเรียงในไทล์ที่สามารถดาวน์โหลดทีละรายการ: http://daymet.ornl.gov/gridded ในการดาวน์โหลดไทล์ต่างๆในคราวเดียวพวกเขาบอกว่าให้ดาวน์โหลดสคริปต์ของพวกเขาซึ่งในที่สุดจะนำไปสู่daymet-nc-retrieval.sh: https://github.com/daymet/scripts/blob/master/Bash/daymet-nc-retrieval.sh แล้วฉันควรจะทำอย่างไรกับรหัสนี้? เว็บไซต์ไม่ได้ให้คำแนะนำเพิ่มเติมโดยสมมติว่าผู้ใช้รู้ว่าต้องทำอย่างไร ฉันเดาว่าคุณควรวางโค้ดลงในแอปพลิเคชันอื่น ๆ ที่ไม่ได้กล่าวถึงสำหรับเบราว์เซอร์ (โดยใช้ Chrome หรือ Firefox ในกรณีนี้)? เกือบจะดูเหมือนบางอย่างที่สามารถวางใน Firefox / Greasemonkey ได้ แต่ก็ไม่มากนัก เพียงแค่ใช้ Google อย่างรวดเร็วเกี่ยวกับประเภทไฟล์ฉันก็ไม่สามารถเข้าใจได้ ฉันแน่ใจว่ามีคำอธิบายง่ายๆเกี่ยวกับสิ่งที่ต้องทำกับไฟล์เหล่านี้ แต่ดูเหมือนว่าจะถูกฝังอยู่ในโพสต์มากมายที่มีคนคิดว่าคุณรู้แล้วว่าจะทำอย่างไรกับไฟล์เหล่านี้ ใครก็ตามที่ยินดีเพียงแค่บอกว่าสิ่งที่ต้องทำจากตารางที่หนึ่งหลังจากไปที่หน้าพร้อมกับโค้ดเพื่อใช้งานจริง? ขอบคุณ.

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