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

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

5
ทำไมต้องใช้เครื่องหมายคำพูดคู่ในการทดสอบ [[]]
สมมติว่าเรามีจำนวนเต็ม 2 ตัวในสคริปต์ทุบตี: value1=5 value2=3 แล้วทำไมเราต้องใช้เครื่องหมายคำพูดคู่ในกรณีของการทดสอบ? ตัวอย่างเช่น: if [[ "$value1" -eq "$value2" ]] ทำไมไม่ลองใช้สิ่งต่อไปนี้? if [[ $value1 -eq $value2 ]] สำหรับฉันการเสนอราคาสองครั้งไม่สมเหตุสมผลเลย
23 bash  shell  quoting  variable  test 

4
ทำไม $ RANDOM ถึงไม่รวมอยู่ในผลลัพธ์ของ 'env'
ฉันรู้ว่าenvเป็นคำสั่งเชลล์มันสามารถใช้ในการพิมพ์รายการของตัวแปรสภาพแวดล้อมปัจจุบัน และเท่าที่ฉันเข้าใจRANDOMก็เป็นตัวแปรสภาพแวดล้อม ดังนั้นทำไมเมื่อฉันเปิดใช้งานenvบน Linux ผลลัพธ์ไม่รวมRANDOM?

6
เป็นไปได้ไหมที่โปรแกรมจะรับจำนวนที่ว่างระหว่างอาร์กิวเมนต์บรรทัดคำสั่งใน POSIX?
พูดถ้าฉันเขียนโปรแกรมด้วยบรรทัดต่อไปนี้: int main(int argc, char** argv) argvตอนนี้ก็รู้ว่าสิ่งที่อาร์กิวเมนต์บรรทัดคำสั่งจะถูกส่งผ่านไปโดยการตรวจสอบเนื้อหาของ โปรแกรมสามารถตรวจสอบว่ามีช่องว่างระหว่างอาร์กิวเมนต์กี่รายการ? เช่นเมื่อฉันพิมพ์เหล่านี้ในทุบตี: ibug@linux:~ $ ./myprog aaa bbb ibug@linux:~ $ ./myprog aaa bbb Environment เป็น Linux ที่ทันสมัย ​​(เช่น Ubuntu 16.04) แต่ฉันคิดว่าคำตอบควรนำไปใช้กับระบบที่สอดคล้องกับ POSIX

6
วิธีรับการตอบกลับจาก URL ใด ๆ
ฉันถูกขอให้เขียนเชลล์สคริปต์เพื่อตรวจสอบว่า URL เป็น UP / ทำงานหรือไม่สำหรับโครงการของฉัน ฉันพยายามค้นหาคำแนะนำทางอินเทอร์เน็ต แต่สิ่งที่ฉันได้รับคือการตรวจสอบว่ามี URL อยู่หรือไม่ wgetครั้งแรกที่ผมพยายามกับ wget -S --spider https://genesis-dev.webbank.ssmb.com:21589/gop-ui/app.jsp 2>&1 | awk '/^ /' if [ $? -ne 0 ] then echo "Server is UP" else echo "Server is down" fi curlพยายามต่อไปของฉันอยู่กับ curl -ivs https://genesis-dev.webbank.ssmb.com:21589/opconsole-sit/opconsole.html# if [ $? -ne 0 ] then echo "Server …

4
อะไรคือความแตกต่างระหว่าง echo `date ', echo“` date'” และ echo '' date ''?
ความแตกต่างระหว่างสามคำสั่งเหล่านี้คืออะไร? echo `date` echo "`date`" echo '`date`' ฉันสับสนในความแตกต่างจริง ๆ ฉันคิดว่าเมื่อ 'อยู่ใกล้ก็หมายความว่ามันเป็นสตริงดังนั้นเสียงก้องจะออกสตริงdateแทนที่จะแสดงวันที่?
23 shell  quoting  echo 

2
เป็นไปได้หรือไม่ที่ nohup จะเขียนเอาต์พุตทั้งสองไปยังไฟล์ nohup.out AND ไปยังหน้าจอ / เทอร์มินัล?
ฉันกำลังใช้bashเปลือก ฉันใช้เป็นประจำnohupเพื่อให้แน่ใจว่ากระบวนการของฉันจะไม่หยุดทำงานเมื่อฉันปิดเชลล์ / เทอร์มินัลที่สตาร์ท ฉันใช้ไวยากรณ์เช่น: nohup myprocess เมื่อเริ่มต้นnohupให้ข้อความ: nohup: ignoring input and appending output to 'nohup.out' จากนั้นnohupไม่ให้เอาต์พุตไปที่หน้าจออีกต่อไป; nohup.outมันเป็นสิ่งที่เขียนไป อย่างไรก็ตามบ่อยครั้งที่ฉันต้องการติดตามความคืบหน้าของการคำนวณของฉัน ฉันสามารถทำได้โดยการอ่านnohup.outโดยใช้viหรือtailแต่อาจใช้เวลานานในการทำมากโดยเฉพาะเมื่อการคำนวณของฉันใช้เวลาหลายชั่วโมง มีวิธีใดบ้างที่ฉันสามารถพิมพ์เอาต์พุตไปยังทั้งสองอย่าง nohup.out (ในกรณีที่ฉันขาดการเชื่อมต่ออินเทอร์เน็ตและเทอร์มินัลที่เริ่มกระบวนการปิด) และหน้าจอ? ขอบคุณที่สละเวลา.
23 bash  shell  nohup 

8
ตรวจสอบว่าสคริปต์เริ่มโดย cron แทนที่จะเรียกใช้ด้วยตนเอง
มีตัวแปรใดที่ cron ตั้งไว้เมื่อรันโปรแกรมหรือไม่? หากสคริปต์ทำงานโดย cron ฉันต้องการข้ามบางส่วน มิฉะนั้นจะเรียกใช้ส่วนเหล่านั้น ฉันจะทราบได้อย่างไรว่าสคริปต์ Bash เริ่มต้นโดย cron
23 bash  shell  scripting  cron 

5
ในการแสดงออกปกติตัวละครใดต้องหลบหนี
โดยทั่วไปแล้วอักขระใดในนิพจน์ทั่วไปที่ต้องหลบหนี ตัวอย่างเช่นต่อไปนี้ไม่ถูกต้องทางไวยากรณ์: echo '[]' | grep '[]' grep: Unmatched [ or [^ อย่างไรก็ตามสิ่งนี้ถูกต้องตามหลักไวยากรณ์: echo '[]' | grep '\[]' [] มีเอกสารใดบ้างที่ควรหลีกเลี่ยงอักขระในนิพจน์ทั่วไปและไม่ควรใช้?


4
ความแตกต่างระหว่าง `curl | sh` และ `sh -c“ $ (curl)””?
คำถามนี้ถูกโยกย้ายจาก Server Fault เนื่องจากสามารถตอบได้ใน Unix & Linux Stack Exchange อพยพ 2 ปีที่แล้ว วิธีการติดตั้งง่าย ๆ อย่างหนึ่งสำหรับ Docker (ตัวอย่าง) คือ: curl -sSL https://get.docker.com/ | sh อย่างไรก็ตามฉันได้เห็นบางอย่างที่มีลักษณะเช่นนี้ (โดยใช้ตัวอย่าง Docker): sh -c "$(curl -sSL https://get.docker.com/)" พวกมันดูเหมือนจะใช้งานได้เหมือนกัน แต่มีเหตุผลที่จะใช้อันหนึ่งกับอีกอันหนึ่งหรือไม่? หรือมันเป็นเพียงสิ่งที่ชอบ / ความงาม? (โปรดทราบว่าให้ระมัดระวังเมื่อเรียกใช้สคริปต์จากต้นกำเนิดที่ไม่รู้จัก)

3
รับตัวแปรสภาพแวดล้อมของผู้ใช้รายอื่น [ปิด]
เป็นการยากที่จะบอกสิ่งที่ถูกถามที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือโวหารและไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน6 ปีที่ผ่านมา มีวิธีที่ฉันเห็นตัวแปรสภาพแวดล้อมของผู้ใช้รายอื่นหรือไม่? ฉันต้องการทำสิ่งนี้ในฐานะรูทดังนั้นการอนุญาตจะไม่เป็นปัญหาฉันเดาได้ สำหรับผู้ใช้เองฉันใช้echo $PATHหรือset | grep PATH(หรือsetเมื่อฉันจำชื่อตัวแปรไม่ได้) คำแนะนำที่คล้ายกันสำหรับผู้ใช้รายอื่นคืออะไร สำหรับสิ่งที่คุ้มค่าฉันอยู่ใน Ubuntu Server 13.04

1
url url โทรเข้าห่วง [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Unix & Linux Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ฉันกำลังทำงานกับทุบตีและฉันพยายามโทร url url ในวง ด้านล่างคือการเรียกขดที่เรียบง่ายของฉัน - curl -v --header "Connection: keep-alive" "localhost:8080/user?userid=52010&client_id=20&attr=0" และฉันพยายามโทรหาขดนี้เพื่อวนซ้ำ 100 ครั้ง - for ((i=1;i<=100;i++)); do curl -v --header "Connection: keep-alive" "localhost:8080/user?uuid=52010&model_id=20&attr=0" done ฉันพยายามเรียกใช้โค้ดข้างต้นเนื่องจากมันอยู่ในบรรทัดคำสั่ง แต่มันใช้งานไม่ได้และมันทำให้ฉันเป็นแบบนี้ - > ความคิดใดที่ฉันทำผิด
23 shell  curl 

3
ไวยากรณ์ของเรื่องไม่เท่ากันหรือไม่
เมื่อทำการเขียนสคริปต์ฉันมักจะเขียน ifs ของฉันด้วยไวยากรณ์ต่อไปนี้เพราะฉันเข้าใจได้ง่ายขึ้นว่าสิ่งต่อไปนี้ไม่เป็นความจริง if [ ! "$1" = "$2" ]; then บางคนบอกว่าวิธีการด้านล่างดีกว่า if [ "$1" != "$2" ]; then สิ่งนี้คือเมื่อฉันถามว่าทำไมและมีความแตกต่างกันหรือไม่ไม่มีใครดูเหมือนจะมีคำตอบใด ๆ ดังนั้นมีความแตกต่างระหว่างสองไวยากรณ์หรือไม่ หนึ่งในนั้นปลอดภัยกว่าหรือไม่ หรือมันเป็นเพียงเรื่องของการตั้งค่า / นิสัย?
22 shell  test 

5
ฉันจะส่งตัวอักษรไปยังคำสั่งราวกับว่าพวกเขามาจากไฟล์ได้อย่างไร
ฉันจะส่งตัวอักษรไปยังคำสั่งราวกับว่าพวกเขามาจากไฟล์ได้อย่างไร ตัวอย่างเช่นฉันพยายาม: wc < "apple pear orange" -bash: apple pear orange: No such file or directory
22 shell 

2
ท่อการไหลของข้อมูลในไปป์ไลน์เป็นอย่างไร
ฉันไม่เข้าใจว่าข้อมูลไหลในท่อและหวังว่าใครบางคนสามารถชี้แจงสิ่งที่เกิดขึ้นที่นั่น ฉันคิดว่าไพพ์ไลน์ของคำสั่งประมวลผลไฟล์ (ข้อความ, อาร์เรย์ของสตริง) ในลักษณะทีละบรรทัด (หากคำสั่งแต่ละคำสั่งใช้งานได้ทีละบรรทัด) แต่ละบรรทัดของข้อความจะผ่านไปป์ไลน์คำสั่งจะไม่รอให้การประมวลผลอินพุตทั้งหมดเสร็จสิ้นก่อนหน้า แต่ดูเหมือนว่ามันจะไม่เป็นเช่นนั้น นี่คือตัวอย่างการทดสอบ มีข้อความบางบรรทัด ฉันพิมพ์ใหญ่และทำซ้ำแต่ละบรรทัดสองครั้ง cat text | tr '[:lower:]' '[:upper:]' | sed 'p'ผมทำด้วย ที่จะปฏิบัติตามกระบวนการที่เราสามารถเรียกมันว่า "การโต้ตอบ" - catข้ามชื่อไฟล์การป้อนข้อมูลใน แต่ละส่วนของไปป์ไลน์ทำงานทีละบรรทัด: $ cat | tr '[:lower:]' '[:upper:]' alkjsd ALKJSD sdkj SDKJ $ cat | sed 'p' line1 line1 line1 line 2 line 2 line 2 แต่ไปป์ไลน์ที่สมบูรณ์รอให้ฉันเสร็จสิ้นอินพุตด้วยEOFและจากนั้นพิมพ์ผลลัพธ์: …

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