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

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

7
วิธีการหมุนภาพทั้งหมดในไดเรกทอรีด้วย imagemagick?
ฉันต้องการหมุนภาพทั้งหมดในไดเรกทอรีที่ตรงกับรูปแบบ จนถึงตอนนี้ฉันมี: for file in `ls /tmp/p/DSC*.JPG`; do convert $file -rotate 90 file+'_rotated'.JPG done แต่นั่นไม่ให้ผลลัพธ์?

3
เป็นไปได้อย่างไรที่จะจัดเรียงฟิลด์ CPU ของคำสั่ง ps
ฉันกำลังพยายามสร้างคำสั่งขนาดเล็กที่จะค้นหากระบวนการที่ใช้พลังงาน CPU มากที่สุด ประการแรกผมใช้แล้วps aux > file.txtcut -c 16-20 file.txt | sort -n | tail -5 ผลลัพธ์ที่ฉันได้รับคือ: 1.0 2.7 8. 14.5 14.5 ดังนั้นคำถามของฉันคือฉันจะมีทั้งการ%CPUใช้งานและฟิลด์อื่นที่แสดงร่วมกันได้อย่างไร
18 bash  shell-script  sort  ps 

5
พิมพ์การจับคู่บรรทัดและบรรทัดที่ n จากบรรทัดที่จับคู่
ฉันพยายามพิมพ์บรรทัดที่จับคู่และบรรทัดที่ 4 จากบรรทัดที่จับคู่ (บรรทัดที่มีนิพจน์ที่ฉันค้นหา) ฉันใช้รหัสต่อไปนี้: sed -n 's/^[ \t]*//; /img class=\"devil_icon/,4p' input.txt แต่จะพิมพ์เฉพาะเส้นที่ตรงกันเท่านั้น นี่พิมพ์เฉพาะบรรทัดที่ 4 awk 'c&&!--c;/img class=\"devil_icon/{c=4}' input.txt ฉันต้องการพิมพ์ทั้งคู่ที่จับคู่และบรรทัดที่ 4 เท่านั้น

3
วนรอบสองบรรทัดของไฟล์แบบขนาน [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Unix & Linux Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา เป้าหมายของสคริปต์ที่ฉันทำคือการเปรียบเทียบไฟล์สองชุด ชื่อไฟล์จะถูกจัดเก็บไว้ในสองไฟล์แยกกันหนึ่งพา ธ ต่อบรรทัด ความคิดของฉันคือมีสองwhile readลูปหนึ่งอันสำหรับแต่ละชื่อไฟล์ แต่ฉันจะผสมลูปทั้งสองเข้าด้วยกันได้อย่างไร while read compareFile <&3; do if [[ ! $server =~ [^[:space:]] ]] ; then #empty line exception continue fi echo "Comparing file - $compareFile" if diff "$compareFile" _(other file from loop?_) …

2
นิยามฟังก์ชันเชลล์: ทำไมมีช่องว่างหลังวงเล็บเปิด?
คุณอาจจะรู้ว่าระเบิดส้อม : :(){ :|:&};: #WARNING: harmful code ฉันสงสัยว่าทำไมมันเป็นสิ่งจำเป็นเพื่อให้การแยกเพื่อรวมช่องว่างหลังจากวงเล็บปีกกาเปิด

3
ฉันจะเชื่อมไฟล์ทั้งหมดในไดเรกทอรีที่กำหนดตามวันที่ที่ฉันต้องการไฟล์ใหม่ล่าสุดอยู่ด้านบนได้อย่างไร
และด้วยไฟล์ที่เก่าที่สุดที่ด้านล่าง? นอกจากนี้หากฉันทำเช่นนี้เป็นไปได้ไหมที่จะตัดส่วนหัวที่ซ้ำซ้อนที่อยู่ในไฟล์ HTML แต่ละไฟล์ ฉันเห็นตัวเองเชื่อมไฟล์ HTML จำนวนมากเข้าด้วยกันและมันก็เป็นการดีที่จะลดขนาดไฟล์ของไฟล์ที่ดีที่สุดลงเล็กน้อย

7
รวบรวมรหัสทางออกของกระบวนการพื้นหลังแบบขนาน (เชลล์ย่อย)
สมมติว่าเรามีสคริปต์ทุบตีดังนี้: echo "x" & echo "y" & echo "z" & ..... echo "Z" & wait มีวิธีในการรวบรวมรหัสทางออกของกระบวนการย่อย / กระบวนการย่อยหรือไม่? กำลังมองหาวิธีการทำสิ่งนี้และหาอะไรไม่เจอ ฉันต้องเรียกใช้ subshells เหล่านี้ในแบบคู่ขนานมิฉะนั้นจะทำได้ง่ายกว่านี้ ฉันกำลังมองหาโซลูชันทั่วไป (ฉันมีกระบวนการย่อยจำนวนไม่ทราบ / แบบไดนามิกเพื่อให้ทำงานแบบขนาน)

1
ความหมายของการเปลี่ยนเส้นทาง '2>> (คำสั่ง)' ใน Bash
ไม่นานมานี้ฉันสร้างสคริปต์และฉันเพิ่มการบันทึกรอบ ๆ มัน แต่ฉันลืมว่าการเปลี่ยนเส้นทางสำหรับการบันทึกทำงานอย่างไร :-( ส่วนสำคัญของมันคือ: #!/bin/bash LOGFILE=/some/path/mylogfile ( # here go my commands which produce some stdout # and, if something goes wrong, also some stderr ) 1>>${LOGFILE} 2> >( tee -a ${LOGFILE} >&2 ) เมื่อฉันเรียกใช้สคริปต์ก็ไม่ได้พิมพ์อะไรไปแต่เพียงพิมพ์สิ่งที่จะไปstdout stderrLogfile ${LOGFILE}จับทั้ง stdout และ stderr เมื่อฉันรันสคริปต์และไม่มีผลลัพธ์ในเทอร์มินัลของฉันฉันรู้ว่าทุกอย่างเรียบร้อยดี หากมีผลลัพธ์ใด ๆ ฉันรู้ว่ามีบางอย่างผิดปกติและฉันสามารถตรวจสอบล็อกไฟล์เพื่อค้นหาว่าปัญหาคืออะไร ส่วนของการเปลี่ยนเส้นทางที่ตอนนี้ไขปริศนาให้ฉันคือไวยากรณ์ของ: 2> >( some …

2
ฉันจะแยกออกจาก while loop ได้อย่างไรจากภายในคำสั่ง case ที่ซ้อนกัน? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Unix & Linux Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ในสคริปต์ด้านล่าง - ซึ่งจะแจ้งให้ผู้ใช้ยืนยันว่าพวกเขาต้องการดำเนินการเรียกใช้สคริปต์ที่อาจไม่ดี - เมื่อผู้ใช้เข้าสู่Yพรอมต์ - มันจะแตกออกจากcaseบล็อกเท่านั้นที่จะถูกส่งกลับเข้าไปในwhileวงอีกครั้ง #! /bin/bash set -e echo echo "bad install start" echo "-----------------------------------------" while true; do read -p "this script will probably fail - do you want to run anyway?" yn case $yn …

8
cron เทียบกับ sleep - อันไหนดีกว่าในแง่ของการใช้ cpu / memory อย่างมีประสิทธิภาพ?
กรณี: ฉันจำเป็นต้องเรียกใช้คำสั่ง / สคริปต์ในช่วงเวลาที่แน่นอนและสำหรับสิ่งนี้ฉันมีสองตัวเลือก: ตั้งค่าcron-job ใช้การวนซ้ำsleepในสคริปต์เอง คำถาม: ตัวเลือกใดที่ดีกว่าจากมุมมองการใช้ทรัพยากรทำไม เป็นcronวิธีที่ดีกว่า cron ใช้ทริกเกอร์บางอย่างหรืออะไรที่ทำให้มันมีประสิทธิภาพมากกว่าอีก cron? cron ใช้ขั้นตอนอะไรในการตรวจสอบและเริ่มงาน?

2
zsh: ไม่รวมไฟล์จากรูปแบบ
ว่าฉันมีไฟล์ต่อไปนี้: |-- bar `-- foo |-- type_A_1 |-- type_A_2 |-- type_B_1 |-- type_B_2 |-- type_B_xx |-- type_B_xx `-- something_else ฉันคิดว่าคำสั่งดังต่อไปนี้ print -l foo/*~{type_B*} จะพิมพ์ทุกอย่างภายใต้foo ยกเว้นสิ่งที่เริ่มต้นด้วยtype_Bแต่ไม่พิมพ์แทนทุกอย่างภายใต้ foo: foo/type_A_1 foo/type_A_2 foo/type_B_1 foo/type_B_2 foo/type_B_xx foo/something_else ฉันพยายามprint -l foo/*~type_Bและได้สิ่งเดียวกัน wildcard ข้อยกเว้น~ทำงานใน zsh อย่างไร

1
ผ่านและการตั้งค่าตัวแปรใน heredoc
ฉันมีสคริปต์ที่ต้องทำสิ่งต่าง ๆ มากมายในเครื่องระยะไกลที่แตกต่างกัน ฉันคิดว่า heredoc จะใช้งานได้ แต่ฉันไม่สามารถใช้ตัวแปรที่กำหนดไว้ที่อื่นในสคริปต์และอีกหนึ่งที่กำหนดไว้ใน heredoc นี่คือรหัสบางส่วน: #!/bin/sh FOO="foo" ssh some.remote.host << EOF BAR="bar" echo "FOO=$FOO" echo "BAR=$BAR" EOF นี่พิมพ์เฉพาะสิ่งต่อไปนี้: FOO = BAR บาร์ = อย่างไรก็ตามถ้าฉันอ้างถึงบรรทัด EOF เช่นนี้ ssh some.remote.host << "EOF" แล้วมันพิมพ์เฉพาะสิ่งต่อไปนี้: FOO = foo BAR = มีคำแนะนำเกี่ยวกับวิธีที่ฉันสามารถใช้ตัวแปรทั้งสองภายใน heredoc? ขอบคุณ

5
หลีกเลี่ยงการเรียกใช้สคริปต์หากไม่ได้กำหนดตัวแปร
ฉันมีสคริปต์ดูเหมือนว่า: c=0 for f in */*; do cp -v "$f" "/myhome/CE$(printf '%0*d' 2 $BATCHNUM)-new-stuctures_extracted/test-$(printf '%0*d' 5 $c)" c=$((c=c+1)) done อย่างไรก็ตามผู้ใช้ต้องจัดให้มีการเรียกตัวแปร BATCHNUM และฉันต้องบังคับให้สคริปต์นี้หยุดทำงาน จะดีกว่าถ้าฉันบังคับให้สคริปต์ที่เรียกสคริปต์นี้หยุดทำงานด้วย (หรือแม้แต่ # 1 สคริปต์ที่เรียกใช้สคริปต์ # 2 ซึ่งเรียกสคริปต์นี้)

3
awk: บังคับให้มีสถานะส่งคืนหรือไม่
นี่คือการติดตามของฉันคำถามก่อนหน้านี้ ฉันกำลังตรวจสอบจำนวนฟิลด์ใน / etc / passwd โดยใช้ snippit ที่มีประโยชน์นี้ ในตัวอย่างต่อไปนี้ผู้ใช้ 'fieldcount1' และ 'fieldcount2' มีจำนวนฟิลด์ที่ไม่ถูกต้อง: $ awk -F: ' NF!=7 {print}' /etc/passwd fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash:::: fieldcount2:blah::blah:1002:100:fieldcount2:/home/fieldcount2:/bin/bash: $ echo $? 0 ในขณะที่คุณสังเกตเห็น awk จะออกโดยมีสถานะการส่งคืนเป็น 0 จากจุดยืนมันไม่มีปัญหาที่นี่ ฉันต้องการรวมคำสั่ง awk นี้ลงในเชลล์สคริปต์ ฉันต้องการพิมพ์บรรทัดทั้งหมดที่มีข้อผิดพลาดและตั้งรหัสส่งคืนเป็น 1 (ข้อผิดพลาด) ฉันสามารถลองบังคับสถานะการออกเฉพาะได้ แต่จากนั้น awk จะพิมพ์เพียงบรรทัดเดียว: $ awk -F: ' NF!=7 {print ; exit …

5
มีตัวดำเนินการ "in" ใน bash / bourne หรือไม่?
ฉันกำลังมองหาโอเปอเรเตอร์“ in” ที่ใช้งานได้เช่นนี้: if [ "$1" in ("cat","dog","mouse") ]; then echo "dollar 1 is either a cat or a dog or a mouse" fi เห็นได้ชัดว่ามันเป็นคำสั่งที่สั้นกว่าเมื่อเปรียบเทียบกับพูดโดยใช้การทดสอบหลาย ๆ แบบหรือ

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