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

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

3
เหตุใดการเปิดไฟล์จึงเร็วกว่าการอ่านเนื้อหาตัวแปร
ในbashสคริปต์ฉันต้องการค่าต่าง ๆ จาก/proc/ไฟล์ จนถึงตอนนี้ฉันมีหลายสิบบรรทัด grepping ไฟล์โดยตรงเช่นนั้น: grep -oP '^MemFree: *\K[0-9]+' /proc/meminfo ในความพยายามที่จะทำให้มีประสิทธิภาพมากขึ้นฉันบันทึกเนื้อหาของไฟล์ไว้ในตัวแปรแล้วทำสิ่งต่อไปนี้: a=$(</proc/meminfo) echo "$a" | grep -oP '^MemFree: *\K[0-9]+' แทนที่จะเปิดไฟล์หลายครั้งควรเปิดเพียงครั้งเดียวและ grep เนื้อหาตัวแปรซึ่งฉันคิดว่าน่าจะเร็วกว่า - แต่อันที่จริงมันช้ากว่า: bash 4.4.19 $ time for i in {1..1000};do grep ^MemFree /proc/meminfo;done >/dev/null real 0m0.803s user 0m0.619s sys 0m0.232s bash 4.4.19 $ a=$(</proc/meminfo) bash 4.4.19 $ …

3
หนึ่งจะรันหลายโปรแกรมในพื้นหลังด้วยคำสั่งเดียวได้อย่างไร
หนึ่งจะรันหลายโปรแกรมในพื้นหลังด้วยคำสั่งเดียวได้อย่างไร ฉันลองคำสั่งด้านล่างแล้ว แต่มันไม่ทำงาน nohup ./script1.sh & && nohup ./script2.sh & -bash: syntax error near unexpected token '&&' nohup ./script1.sh & ; nohup ./script2.sh & -bash: syntax error near unexpected token ';'

4
ทำไม“ sudo su” ในเชลล์สคริปต์ไม่ทำงานส่วนที่เหลือของสคริปต์เป็นรูท
สคริปต์ตัวอย่างสามารถเป็นด้านล่าง: #!/bin/bash sudo su ls /root เมื่อใช้./test.shในฐานะผู้ใช้ปกติแทนที่จะเรียกใช้lsในฐานะผู้ใช้ขั้นสูงและออกจากระบบจะเปลี่ยนเป็นรูท และเมื่อฉันออกจากระบบจะดำเนินการls /rootในฐานะผู้ใช้ปกติ ใครสามารถบอกฉันเกี่ยวกับกลไกเกี่ยวกับเรื่องนี้ได้บ้าง
36 shell  shell-script  sudo  root  su 



3
`ข้อผิดพลาดทางไวยากรณ์:“ (” ไม่คาดคิด” เมื่อสร้างอาร์เรย์
ฉันมีเซิร์ฟเวอร์ Linux (Debian) สองตัว ฉันกำลังสร้างเชลล์สคริปต์ ในครั้งแรกที่ฉันสร้างอาร์เรย์ดังนี้: #!/bin/bash target_array=( "/home/user/direct/filename -p123 -r" ) มันใช้งานได้ดี แต่เมื่อฉันเรียกใช้บนเซิร์ฟเวอร์อื่นฉันจะได้รับ: Syntax error: "(" unexpected เท่าที่ฉันสามารถบอกได้ว่าเซิร์ฟเวอร์ทั้งสองนั้นเหมือนกัน มีใครบ้างไหมที่จะเข้าใจว่าทำไมสิ่งนี้ถึงไม่ได้ผล? ถ้าฉันพิมพ์ลงในเทอร์มินัลโดยตรงก็ดี มันจะปรากฏว่าเมื่อฉันเรียกใช้เป็น sh scriptname.sh ฉันได้รับข้อผิดพลาด แต่ถ้าฉันเรียกใช้เป็น ./scriptname.sh ดูเหมือนว่าจะโอเค ความแตกต่างคืออะไร?

5
จะแนะนำการหมดเวลาใช้งานของสคริปต์เชลล์ได้อย่างไร
ฉันต้องการรันเชลล์สคริปต์ที่มีลูปในนั้นและสามารถไปได้ตลอดซึ่งฉันไม่ต้องการที่จะเกิดขึ้น ดังนั้นฉันต้องแนะนำการหยุดพักชั่วคราวสำหรับสคริปต์ทั้งหมด ฉันจะแนะนำการหมดเวลาสำหรับเชลล์สคริปต์ทั้งหมดภายใต้ SuSE ได้อย่างไร

4
aliasing cd to pushd - เป็นความคิดที่ดีหรือไม่?
ควรใช้นามแฝงต่อไปนี้หรือไม่: cd() { pushd $1; } ในทุบตี? ฉันคิดว่ามันจะมีประโยชน์มากเพราะฉันสามารถใช้ชุดข้อมูลpopdแทนที่จะเป็นเพียงcd -ครั้งเดียว มีกรณีใดบ้างที่สิ่งนี้อาจเป็นปัญหาหรือไม่?


4
ข้อผิดพลาดทางไวยากรณ์ของ Bash เมื่อ“ อื่น” ตามหลังประโยค“ ว่าง” ที่ว่างเปล่า
ทำไมสคริปต์ต่อไปนี้จะไม่ทำงาน แต่ให้ข้อผิดพลาดทางไวยากรณ์ของelse: LOGS3_DIR=~/logs if [ -d "$LOGS3_DIR" ]; then cd cd "$LOGS3_DIR" echo "$LOGS3_DIR" for filename in `find "." -mtime 1 -type f` do if lsof "$filename" > /dev/null then # file is open else echo "deleting $filename" rm "$filename" fi done fi

2
จำเป็นต้องใช้เครื่องหมายคำพูดสำหรับการกำหนดตัวแปรท้องถิ่นหรือไม่?
ฉันสามารถละเว้นการเสนอราคาทางด้านขวาของการมอบหมายงานท้องถิ่นได้อย่างปลอดภัยหรือไม่? function foo { local myvar=${bar} stuff() } ฉันสนใจเป็นหลักbashแต่ข้อมูลใด ๆ ในกรณีมุมในเปลือกหอยอื่น ๆ ยินดีต้อนรับ

3
อะไรคือความแตกต่างระหว่าง [[$ a == z *]] และ [$ a == z *]
มีความแตกต่างระหว่างสองสิ่งนี้หรือไม่ [[ $a == z* ]] และ [ $a == z* ] ฉันสามารถมีตัวอย่างที่พวกเขาจะมีผลลัพธ์ที่แตกต่างกันหรือไม่ นอกจากนี้การทำงานของ[[ ]]แตกต่างกัน[ ]อย่างไร

1
อย่างไร !! ทำงานในทุบตี?
มีประโยชน์มากเมื่อคุณลืม sudo ที่จุดเริ่มต้นของคำสั่งของคุณ!!ทำหน้าที่เหมือนนามแฝงของคำสั่งก่อนหน้า ตัวอย่าง: $ mv /very/long/path/for/a/protected/sensible/file/caution.h . (...) Permission denined $ sudo !! sudo mv /very/long/path/for(...) . [sudo] password : เราจะเรียก!!เคล็ดลับสองครั้งนั้นได้อย่างไร งานวิจัยทางอินเทอร์เน็ตนั้นยากเพราะโทเค็นนั้น มันทำงานยังไง? ฉันสงสัยลิงก์ด้วยคำสั่ง history มันถูกกำหนดไว้ที่ไหน? ฉันสามารถนิยามตัวเองได้ไหม แก้ไข: นักออกแบบเหตุการณ์ที่น่าสนใจ !!:* มันหมายถึงข้อโต้แย้งของคำสั่งก่อนหน้า ใช้กรณี: cat /a/file/to/read/with/long/path nano !!:* :p เพียงพิมพ์คำสั่งโดยไม่ต้องดำเนินการคุณจะต้องวางไว้ที่ส่วนท้ายของตัวกำหนดเหตุการณ์ $ !-5:p sudo rm /etc/fstab -f เพิ่มเติมที่นี่


6
ค้นหาคำที่พบบ่อยที่สุดในไฟล์
ฉันต้องการค้นหาพูดคำที่พบบ่อยที่สุด 10 คำในไฟล์ข้อความ ประการแรกควรปรับแก้ปัญหาให้เหมาะสมสำหรับการกดแป้น (ในคำอื่น ๆ - เวลาของฉัน) ประการที่สองสำหรับประสิทธิภาพ นี่คือสิ่งที่ฉันมีเพื่อให้ได้รับ 10 อันดับแรก: cat test.txt | tr -c '[:alnum:]' '[\n*]' | uniq -c | sort -nr | head -10 6 k 2 g 2 e 2 a 1 r 1 k22 1 k 1 f 1 eeeeeeeeeeeeeeeeeeeee 1 d ฉันสามารถสร้างโปรแกรมจาวา, ไพ …

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