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

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

3
ในเชลล์สคริปต์ฉันจะ (1) เริ่มคำสั่งในพื้นหลังได้อย่างไร (2) รอ x วินาที (3) เรียกใช้คำสั่งที่สองขณะที่คำสั่งนั้นกำลังทำงานอยู่
นี่คือสิ่งที่ฉันต้องเกิดขึ้น: เริ่มกระบวนการ A ในพื้นหลัง รอ x วินาที เริ่มกระบวนการ B ในเบื้องหน้า ฉันจะรอให้เกิดขึ้นได้อย่างไร ฉันเห็นว่า 'หลับ' ดูเหมือนว่าจะหยุดทุกอย่างและฉันไม่ต้องการ 'รอ' เพื่อให้กระบวนการ A สิ้นสุดโดยสิ้นเชิง ฉันเคยเห็นลูปเป็นระยะเวลาหนึ่งแล้ว แต่ฉันสงสัยว่ามีบางอย่างที่สะอาดกว่านี้หรือไม่

2
%% หมายถึงอะไรในชื่อฟังก์ชัน
เมื่อดูที่ผลลัพธ์ของenvฉันพบว่ามีฟังก์ชั่นต่อไปนี้ BASH_FUNC_mc%%=() { . /usr/share/mc/mc-wrapper.sh } เนื้อหาของไฟล์ /usr/share/mc/mc-wrapper.sh มีดังต่อไปนี้ MC_USER=`id | sed 's/[^(]*(//;s/).*//'` MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$" /usr/bin/mc -P "$MC_PWD_FILE" "$@" if test -r "$MC_PWD_FILE"; then MC_PWD="`cat "$MC_PWD_FILE"`" if test -n "$MC_PWD" && test -d "$MC_PWD"; then cd "$MC_PWD" fi unset MC_PWD fi rm -f "$MC_PWD_FILE" unset MC_PWD_FILE สิ่งที่ทำ%%อักขระหมายถึงในชื่อฟังก์ชัน? พวกเขาทำให้มันเป็นฟังก์ชั่นที่เรียกใช้ในกรณีที่เฉพาะเจาะจงหรือพวกเขาอนุญาตให้ฉันเรียกมันแตกต่างจากฟังก์ชั่นอื่น ๆ ? ฉันใช้ …

1
ฉันจะทดสอบความทนทานในการจัดการไฟล์เชลล์สคริปต์ได้อย่างไร
ฉันเขียนเชลล์สคริปต์ที่จัดการชื่อไฟล์ "ปกติ" บางตัว แต่ฉันอ่านแล้วทำไมเชลล์สคริปต์ของฉันถึงสำลักในช่องว่างหรืออักขระพิเศษอื่น ๆ และทำไมคุณไม่ควรแยกวิเคราะห์ผลลัพธ์ของ lsและฉันต้องการให้มันมีประสิทธิภาพมากกว่าและจัดการชื่อไฟล์ที่ถูกต้อง (และ / หรือชื่อไดเรกทอรี) ฉันจะสร้างไฟล์ทดสอบและไดเรกทอรีเพื่อเรียกใช้สคริปต์ของฉันได้อย่างไร

2
bash ไม่สามารถเก็บ hexvalue 0x00 ในตัวแปรได้
ฉันพยายามจะเล่นกลกับ dd ฉันคิดว่ามันจะเป็นไปได้ที่จะเก็บ hexvalues ​​บางอย่างในตัวแปรที่เรียกว่า "header" เพื่อไพพ์ลงใน dd ขั้นตอนแรกของฉันที่ไม่มีตัวแปรคือ: $ echo -ne "\x36\xc9\xda\x00\xb4" |dd of=hex $ hd hex 00000000 36 c9 da 00 b4 |6....| 00000005 หลังจากนั้นฉันลองทำสิ่งนี้: $ header=$(echo -ne "\x36\xc9\xda\x00\xb4") $ echo -n $header | hd 00000000 36 c9 da b4 |6...| 00000004 อย่างที่คุณเห็นฉันสูญเสีย\x00คุณค่าใน$headerตัวแปร ใครบ้างมีคำอธิบายสำหรับพฤติกรรมนี้หรือไม่? นี่ทำให้ฉันบ้า
11 linux  bash  shell-script  dd 

3
ทำไมฉันถึงได้รับสถานะการออกที่แตกต่างกันสำหรับ ps | grep ในสคริปต์หรือไม่
ฉันใช้สคริปต์ด้านล่าง: #!/bin/bash ps ax | grep -q [v]arnish if [ $? -eq 0 ];then echo varnish is running... exit 0 else echo "Critical : varnish is not running " exit 2 fi ผลลัพธ์เป็นเหมือน :: [root@server ~]# sh -x check_varnish_pro.sh + ps ax + grep -q '[v]arnish' + '[' 0 -eq …

1
มีวิธีที่สวยงามในการตั้งค่าตัวแปรเชลล์ให้กับเนื้อหาของไฟล์หรือไม่?
configว่าฉันมีข้อมูลการกำหนดค่าบางอย่างในแฟ้ม ฉันต้องการโหลดข้อมูลนี้ลงในตัวแปรเชลล์เพื่อความCONFIG_DATAสะดวก เห็นได้ชัดว่าฉันสามารถทำ: CONFIG_DATA="$(cat config)" แต่ความรู้สึกแบบนี้ไม่มีประโยชน์catกับฉัน นี่เป็นวิธีเดียวที่จะทำเช่นนี้? หรือมีวิธีที่สง่างามกว่าที่จะทำหรือไม่ รู้รอบควรเลือก POSIX แต่อาจใช้เชลล์ใดก็ได้

11
วิธีรับอาร์กิวเมนต์สุดท้ายไปยังฟังก์ชัน / bin / sh
เป็นวิธีที่ดีกว่าในการใช้งานprint_last_argอะไร #!/bin/sh print_last_arg () { eval "echo \${$#}" # this hurts } print_last_arg foo bar baz # baz (ถ้าเป็นแบบนี้ให้บอกว่า#!/usr/bin/zshแทนที่จะ#!/bin/shรู้ว่าจะทำอย่างไรปัญหาของฉันคือการหาวิธีที่เหมาะสมในการใช้สิ่งนี้เพื่อ#!/bin/sh) แก้ไข: ข้างต้นเป็นเพียงตัวอย่างที่โง่ เป้าหมายของฉันคือไม่พิมพ์อาร์กิวเมนต์สุดท้าย แต่มีวิธีอ้างถึงอาร์กิวเมนต์ล่าสุดภายในฟังก์ชันเชลล์ EDIT2: ฉันขอโทษสำหรับคำถามที่มีคำพูดที่ไม่ชัดเจน ฉันหวังว่าจะทำให้ถูกต้องในครั้งนี้ หากนี่เป็น/bin/zshแทนที่จะ/bin/shฉันสามารถเขียนสิ่งนี้ #!/bin/zsh print_last_arg () { local last_arg=$argv[$#] echo $last_arg } การแสดงออก$argv[$#]เป็นตัวอย่างของสิ่งที่ผมอธิบายไว้ในแก้ไขครั้งแรกของฉันในฐานะที่เป็นวิธีการที่จะอ้างถึงอาร์กิวเมนต์สุดท้ายภายในฟังก์ชั่นเชลล์ ดังนั้นฉันควรเขียนตัวอย่างดั้งเดิมของฉันเช่นนี้: print_last_arg () { local last_arg=$(eval "echo \${$#}") # but this hurts even …



4
รับวันที่ของวันสุดท้ายของเดือนที่แล้วในเชลล์สคริปต์
ฉันจะได้รับวันที่สิ้นสุดเดือนก่อนหน้าตามวันที่ประมวลผลได้อย่างไร ตัวอย่าง: วันที่ดำเนินการ = 15jan2015 วันที่คาดหวัง = 31dec2014 วันที่ดำเนินการ = 10feb2015 วันที่คาดหวัง = 31jan2015

6
ลบบรรทัดออกจากไฟล์โดยขึ้นอยู่กับบรรทัดที่พบในไฟล์อื่น
ไฟล์ file1.txt มีบรรทัดเช่น: /api/purchase/<hash>/index.html ตัวอย่างเช่น: /api/purchase/12ab09f46/index.html ไฟล์ file2.csv มีบรรทัดเช่น: <hash>,timestamp,ip_address ตัวอย่างเช่น: 12ab09f46,20150812235200,22.231.113.64 a77b3ff22,20150812235959,194.66.82.11 ฉันต้องการกรอง file2.csv ลบบรรทัดทั้งหมดที่มีค่าแฮชอยู่ใน file1.txt กล่าวได้ว่า: cat file1.txt | extract <hash> | sed '/<hash>/d' file2.csv หรืออะไรทำนองนี้ มันควรจะตรงไปตรงมา แต่ดูเหมือนว่าฉันจะไม่สามารถใช้งานได้ ใครช่วยกรุณาให้ขั้นตอนการทำงานสำหรับงานนี้ได้ไหม

4
วิธีแยกสตริงจาก textfile อย่างรวดเร็ว?
ฉันมีไฟล์ข้อความสองไฟล์: string.txt และ lengths.txt String.txt: abcdefghijklmnopqrstuvwxyz lengths.txt 5 4 10 7 ฉันต้องการรับไฟล์ >Entry_1 abcde >Entry_2 fghi >Entry_3 jklmnopqrs >Entry_4 tuvwxyz ฉันทำงานกับ 28,000 รายการและพวกเขาแตกต่างกันระหว่าง 200 และ 56,000 ตัวอักษร ในขณะนี้ฉันกำลังใช้: start=1 end=0 i=0 while read read_l do let i=i+1 let end=end+read_l echo -e ">Entry_$i" >>outfile.txt echo "$(cut -c$start-$end String.txt)" >>outfile.txt let start=start+read_l …

4
เป็นวิธีที่ชาญฉลาดในการนับจำนวนวันตั้งแต่ X อะไร
ฉันเริ่มทำงานที่ตำแหน่งปัจจุบันของฉันตั้งแต่วันที่ 17 พฤศจิกายน 2014 ฉันอยากจะรู้ว่าตอนนี้ทำงานได้กี่วัน มีความคิดเห็นเกี่ยวกับวิธีการใช้งาน Linux เพื่อหาทางออกที่ง่ายและดีหรือไม่?

3
ไปจาก String ไปยัง Array ของ "words" ใน Bash
ฉันต้องไปจากสตริงไปยังอาร์เรย์ที่แต่ละรายการเป็นแต่ละคำในสตริงนั้น ตัวอย่างเช่นเริ่มต้นด้วย: VotePedro="Vote for Pedro" ฉันต้องการอาร์เรย์: Vote For Pedro ซึ่งฉันควรจะสามารถย้ำกว่าเป็น: for i in "${votePedroArray[@]}" do ## Do something done

3
ฉันควรใช้เครื่องหมายสแลชที่ส่วนท้ายของตัวแปรพา ธ ในเชลล์สคริปต์หรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว วันนี้เมื่อเขียนเชลล์สคริปต์ของฉัน ทันใดนั้นคำถามก็มาถึงใจฉัน ตั้งแต่cd /target_dirและcd /target_dir/ทั้งสองทำงาน ฉันควรเพิ่มเครื่องหมายสแลชที่ส่วนท้ายของตัวแปรพา ธ ของฉันในเชลล์สคริปต์หรือไม่ เช่นเมื่อเทียบกับLOG_PATH=/data/nginx/logsLOG_PATH=/data/nginx/logs/ ฉันทำการค้นหาขั้นต้นบน google แต่ไม่พบการสนทนาเกี่ยวกับสิ่งนี้บางทีมันอาจจะธรรมดาเกินไป สำหรับตอนนี้มันยากสำหรับฉันที่จะตัดสินใจเลือกสไตล์ แต่ฉันชอบLOG_PATH=/target_dir/สไตล์มากกว่านี้ เพราะเมื่อฉันกำลังเติมข้อความอัตโนมัติด้วยการทุบตีมันทำให้ฉันเห็นผลลัพธ์ด้วยเครื่องหมายทับ คุณมีความคิดเห็นเกี่ยวกับเรื่องนี้ทำไม

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