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

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

11
ฉันจะรันเชลล์สคริปต์ได้อย่างไรโดยไม่ใช้คำสั่ง“ sh” หรือ“ bash”
ฉันมีเชลล์สคริปต์ที่ฉันต้องการเรียกใช้โดยไม่ใช้คำสั่ง "sh" หรือ "bash" ตัวอย่างเช่น: แทน: sh script.sh ฉันต้องการใช้: script.sh ฉันจะทำสิ่งนี้ได้อย่างไร PS (i) ฉันไม่ได้ใช้เชลล์สคริปต์มากนักและฉันพยายามอ่านเกี่ยวกับชื่อแทน แต่ฉันไม่เข้าใจวิธีใช้พวกเขา (ii) ฉันยังอ่านเกี่ยวกับการเชื่อมโยงสคริปต์กับไฟล์อื่นในตัวแปร PATH ฉันใช้เซิร์ฟเวอร์มหาวิทยาลัยของฉันและฉันไม่มีสิทธิ์ในการสร้างไฟล์ในสถานที่เหล่านั้น
261 bash  shell  alias  sh 

6
อะไรคือข้อแตกต่างระหว่าง $ (command) และ `command` ในการเขียนโปรแกรมเชลล์?
ในการจัดเก็บเอาต์พุตของคำสั่งเป็นตัวแปรใน sh / ksh / bash คุณสามารถทำได้ var=$(command) หรือ var=`command` ความแตกต่างระหว่างสองวิธีคืออะไร?
258 bash  shell  ksh  sh 

8
เลือกค่าที่ไม่ซ้ำกันหรือแตกต่างจากรายการในเชลล์สคริปต์ UNIX
ฉันมีสคริปต์ ksh ที่คืนค่ารายการจำนวนมากบรรทัดใหม่คั่นและฉันต้องการเห็นเฉพาะค่าที่ไม่ซ้ำกัน / แตกต่างกัน เป็นไปได้ที่จะทำเช่นนี้? ตัวอย่างเช่นสมมติว่าเอาต์พุตของฉันคือคำต่อท้ายไฟล์ในไดเรกทอรี: tar gz java gz java tar class class ฉันต้องการดูรายการที่ชอบ: tar gz java class
238 bash  unique  distinct  ksh  sh 

3
Ubuntu บอกว่า“ bash: ./program ปฏิเสธการอนุญาต” [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน6 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ผมใช้ Ubuntu บนเครื่องคอมพิวเตอร์ 1 เครื่องและคอมพิวเตอร์ 2. ฉันรวบรวมโปรแกรม C ++ ได้บนเครื่องคอมพิวเตอร์ 1 ./program_nameและฉันสามารถดำเนินการได้จากท่าเรือโดยใช้ มันทำงานได้ดี อย่างไรก็ตามเมื่อฉันพยายามทำสิ่งนี้บนคอมพิวเตอร์ 2 มันบอกว่า: bash: ./program_name: permission denied มีอะไรผิดปกติและฉันควรทำอย่างไร
206 bash  shell  sh 

7
เปรียบเทียบสตริงโดยใช้ sh shell
ฉันใช้ SH เชลล์และฉันพยายามเปรียบเทียบสตริงกับค่าของตัวแปร แต่ifเงื่อนไขจะถูกดำเนินการเป็นจริงเสมอ ทำไม? นี่คือรหัสบางส่วน: Sourcesystem="ABC" if [ "$Sourcesystem" -eq 'XYZ' ]; then echo "Sourcesystem Matched" else echo "Sourcesystem is NOT Matched $Sourcesystem" fi; echo Sourcesystem Value is $Sourcesystem ; แม้จะใช้งานไม่ได้: Sourcesystem="ABC" if [ 'XYZ' -eq "$Sourcesystem" ]; then echo "Sourcesystem Matched" else echo "Sourcesystem is NOT Matched $Sourcesystem" …
197 shell  unix  sh 

3
การใช้ตัวแปรภายใน bash heredoc
ฉันพยายามแก้ไขตัวแปรภายใน bash heredoc: var=$1 sudo tee "/path/to/outfile" > /dev/null << "EOF" Some text that contains my $var EOF สิ่งนี้ไม่ทำงานอย่างที่ฉันคาดไว้ ( $varได้รับการปฏิบัติอย่างแท้จริงไม่ขยาย) ฉันต้องใช้sudo teeเพราะการสร้างไฟล์ต้องใช้ sudo ทำสิ่งที่ชอบ: sudo cat > /path/to/outfile <<EOT my text... EOT ไม่ทำงานเพราะ>outfileเปิดไฟล์ในเชลล์ปัจจุบันซึ่งไม่ได้ใช้งาน sudo
192 bash  variables  sh  heredoc 


7
ตัวแปรที่ถูกแก้ไขภายในลูป while ไม่ได้ถูกจดจำ
ในโปรแกรมต่อไปนี้ถ้าฉันตั้งค่าตัวแปร$fooเป็นค่า 1 ภายในifคำสั่งแรกมันจะทำงานในแง่ที่ว่าค่านั้นถูกจดจำหลังจากคำสั่ง if อย่างไรก็ตามเมื่อฉันตั้งค่าตัวแปรเดียวกันเป็นค่า 2 ภายในคำสั่งifที่อยู่ในwhileคำสั่งมันจะถูกลืมหลังจากwhileวนรอบ มันทำงานเหมือนกับว่าฉันกำลังใช้สำเนาของตัวแปร$fooภายในwhileลูปและฉันกำลังแก้ไขเฉพาะสำเนานั้น นี่คือโปรแกรมทดสอบที่สมบูรณ์: #!/bin/bash set -e set -u foo=0 bar="hello" if [[ "$bar" == "hello" ]] then foo=1 echo "Setting \$foo to 1: $foo" fi echo "Variable \$foo after if statement: $foo" lines="first line\nsecond line\nthird line" echo -e $lines | while read line do …
187 bash  while-loop  scope  sh 

8
Git Alias ​​- คำสั่งและพารามิเตอร์หลายตัว
ฉันพยายามสร้างนามแฝงที่ใช้ทั้งคำสั่ง Git และพารามิเตอร์ตำแหน่งต่างๆ มีหน้า Stackoverflow สำหรับแต่ละหน้าและจะปรากฏชัดเจนอย่างเจ็บปวดเมื่อต้องทำทั้งสองอย่าง แต่ฉันมีปัญหา ตัวอย่างเช่นฉันต้องการสลับไปที่สาขา foo และดำเนินการสถานะ ดังนั้นในของ.gitconfigฉันฉันมี: [alias] chs = !sh -c 'git checkout $0 && git status' ซึ่งไม่ทำงาน ในขณะที่บางสิ่งเช่นนี้จะทำงาน chs = !sh -c 'git checkout $0' echoes = !sh -c 'echo hi && echo bye' ความเข้าใจใด ๆ ที่จะได้รับการชื่นชม
182 git  sh  alias  git-alias 

5
ฉันจะ จำกัด จำนวนผลลัพธ์ที่ส่งคืนจาก grep ได้อย่างไร
ฉันต้องการพูดสูงสุด 10 บรรทัดจาก grep ฉันไม่ต้องการให้คอมพิวเตอร์ทำงานหนัก ฉันต้องการให้มันหยุดหลังจาก 10 ผลลัพธ์ที่พบโดย grep เป็นไปได้ไหม?
180 linux  bash  unix  sh 

8
ประโยชน์ของการใช้ $ () แทน backticks ในเชลล์สคริปคืออะไร?
มีสองวิธีในการดักจับเอาต์พุตของ command line ในbash: Legacy Bourne shell backticks ``: var=`command` $() ไวยากรณ์ (ซึ่งเท่าที่ฉันรู้ว่าเป็น Bash เฉพาะหรืออย่างน้อยก็ไม่ได้รับการสนับสนุนโดยกระสุนเก่าที่ไม่ใช่ POSIX เช่นบอร์นเดิม) var=$(command) มีประโยชน์ในการใช้ไวยากรณ์ที่สองเมื่อเทียบกับ backticks หรือไม่ หรือเทียบเท่าสองอย่างเต็มที่ 100%
175 syntax  sh  backticks 

4
การเรียกฟังก์ชันเชลล์ด้วย xargs
ฉันพยายามใช้ xargs เพื่อเรียกใช้ฟังก์ชันที่ซับซ้อนมากขึ้นในแบบคู่ขนาน #!/bin/bash echo_var(){ echo $1 return 0 } seq -f "n%04g" 1 100 |xargs -n 1 -P 10 -i echo_var {} exit 0 ส่งคืนข้อผิดพลาด xargs: echo_var: No such file or directory ความคิดใด ๆ เกี่ยวกับวิธีที่ฉันสามารถใช้ xargs เพื่อทำให้สิ่งนี้สำเร็จมิเช่นนั้นจะยินดีต้อนรับทางออกอื่น ๆ
168 bash  sh  xargs 

12
ไม่พบคำสั่ง source ใน sh shell
ฉันมีสคริปต์ที่ใช้shเชลล์ ฉันพบข้อผิดพลาดในบรรทัดที่ใช้sourceคำสั่ง ดูเหมือนว่าsourceจะไม่รวมอยู่ในshเปลือกของฉัน ถ้าฉันพยายามเรียกใช้sourceจาก shell อย่างชัดเจนฉันจะได้รับ: sh: 1: source: not found ฉันควรติดตั้ง "แหล่ง" อย่างใดหรือไม่ ฉันมีรุ่นผิดshหรือเปล่า?
149 bash  shell  sh 

10
ฉันจะลบนามสกุลไฟล์ในเชลล์สคริปต์ได้อย่างไร
มีอะไรผิดปกติกับรหัสต่อไปนี้? name='$filename | cut -f1 -d'.'' ตามที่ฉันได้รับสายตัวอักษร$filename | cut -f1 -d'.'แต่ถ้าฉันลบอัญประกาศฉันไม่ได้รับอะไร ในขณะเดียวกันพิมพ์ "test.exe" | cut -f1 -d'.' ในเชลล์ให้ผลลัพธ์ที่ฉันต้องการ, test. ฉันรู้แล้วว่า$filenameได้รับการกำหนดค่าที่เหมาะสม สิ่งที่ฉันต้องการจะทำคือกำหนดตัวแปรชื่อไฟล์ที่ไม่มีนามสกุล
145 bash  shell  sh  cut  gnu-coreutils 

5
บรรทัด“ #! / bin / sh” หมายถึงอะไรในเชลล์สคริปต์ UNIX
ฉันกำลังทำแบบฝึกหัดเชลล์สคริปต์และพบโปรแกรมตัวอย่างต่อไปนี้: #!/bin/sh clear echo "HELLO WORLD" ทุกคนได้โปรดบอกฉันว่าความสำคัญของความคิดเห็น#!/bin/shในตอนเริ่มต้นคืออะไร?
142 shell  unix  sh  shebang 

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