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

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

2
ทดสอบ POSIX และ -a
ฉันตรวจสอบสคริปต์ของฉันด้วยcheckbashismsและฉันได้รับคำเตือนดังต่อไปนี้: possible bashism in check_ssl_cert line 821 (test -a/-o): if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then ในข้อกำหนด 4.62.4 ของ POSIX ที่ฉันพบ primary -a primary ดำเนินการไบนารีและของผลลัพธ์หลักและหลัก ตัวดำเนินการ -a มีความสำคัญเหนือกว่าตัวดำเนินการ -o ทำไม-aและ-oไม่ถือว่าเป็นอุปกรณ์พกพา

3
ใน Unix พูดอะไรคือความแตกต่างระหว่าง shell script และ executable?
ฉันเคยเห็นคำถามนี้ในเว็บไซต์นี้และทำให้ฉันถามคำถามนี้ ฉันต้องการทราบใน Unix พูดความแตกต่างระหว่างปฏิบัติการและเชลล์สคริปต์อะไร

2
การร้องขออินพุตของผู้ใช้ขณะอ่านบรรทัดไฟล์ตามบรรทัด
สำหรับคลาสฉันต้องเขียนสคริปต์ Bash ที่จะเอาท์พุทจากispellและเมื่อฉันลองและขอให้ผู้ใช้ป้อนข้อมูลในขณะที่ลูปมันก็แค่บันทึกบรรทัดถัดไปของไฟล์เป็นอินพุตของผู้ใช้ ฉันจะขอผู้ใช้ในขณะที่วนรอบได้อย่างไร? #!/bin/bash #Returns the misspelled words #ispell -l < file #define vars ISPELL_OUTPUT_FILE="output.tmp"; INPUT_FILE=$1 ispell -l < $INPUT_FILE > $ISPELL_OUTPUT_FILE; #echo a new line for give space between command #and the output generated echo ""; while read line; do echo "'$line' is misspelled. Press "Enter" to keep"; …

1
การเปลี่ยนเส้นทางและช่องว่างเอาท์พุท
ฉันหวาดระแวงเกี่ยวกับเรื่องนี้ แต่หวังว่ามันจะเป็นคำถามง่าย ๆ : มีความแตกต่างระหว่าง cat file1 | egrep -oP "[Mm]y string" > /home/user/file.txt และ cat file1|egrep -oP "[Mm]y string">/home/user/file.txt เช่นจะเป็นสิ่งสำคัญหรือไม่หากฉันมีช่องว่างที่เติมช่องว่าง (|) และเปลี่ยนเส้นทาง (>) ฉันหวาดระแวงจริงๆที่มีช่องว่างที่นั่นช่องว่างนั้นจะจบลงในไฟล์เอาต์พุตเมื่อฉันไม่ต้องการมัน ทุกคนสามารถอธิบายได้หรือไม่ (การใช้ Ubuntu 12 / bash หากมีความสำคัญ)

2
การลบไฟล์สคริปต์ออกจากภายในสคริปต์นั้นปลอดภัยหรือไม่
fooลองนึกภาพผมมีสคริปต์ ควรรันครั้งเดียวเมื่อผู้ใช้ลงชื่อเข้าใช้และไม่จำเป็นหลังจากเรียกใช้สำเร็จ คำถามของฉัน: ปลอดภัยไหมที่จะลบไฟล์สคริปต์ออกจากภายในสคริปต์? เช่น: #!/bin/bash # do something ... # if successful rm /path/to/foo exit 0

2
การขนานสำหรับลูป
ฉันต้องการขนานforลูปของรหัสต่อไปนี้ ทำอย่างไร #!/bin/bash N=$1 n=$2 for (( i=1; i<=$N; i++ )); do min=100000000000000 //set min to some garbage value for (( j=1; j<=$n; j++ )); do val=$(/path/to/a.out) val2=`echo $val | bc` if (( $val2 < $min )); then min=$val2; fi done arr=("${arr[@]}" "$min") done

2
คำสั่ง XFCE หรือบริสุทธิ์ X11 สลับการเรียบเรียงโดยทันทีโดยไม่ต้องรีสตาร์ท X
ฉันจะปิดการใช้งานคอมโพสิตผ่านบรรทัดคำสั่งได้อย่างไร ฉันต้องปิดการใช้งานชั่วคราวสำหรับบางเกมเช่น Nexuiz เพื่อใช้ในสคริปต์ตัวตัดคำเพื่อสลับสถานะการแต่งเพลง

3
Mass .flac -> .mp3 การแปลงรหัส: จะเขียนเชลล์สคริปต์ที่เก็บรักษาข้อมูลแท็ก ID3 ได้อย่างไร
ในช่วงไม่กี่สัปดาห์ที่ผ่านมาฉันได้เปลี่ยนวิธีการแปลงไฟล์ .flac -> .mp3 ไปเป็นชุดที่ 'ตั้งค่าและลืม' ได้มากพอสมควร ขั้นตอนแรกคือการหยุดการใช้ส่วนหน้า GUI (Audacity กับปลั๊กอิน LAME) และใช้วิธีที่ฉันอธิบายไว้ที่นี่แทน ขั้นตอนที่สองคือการค้นหา bash shell script ที่จะบอกให้วนรอบคำสั่งทำงานซ้ำโดยอนุญาตให้ไดเรกทอรีที่มีไดเรกทอรีย่อยมากมายที่มีไฟล์. flac ทำการแปลงรหัสในขั้นตอนเดียว ว่าคำตอบที่ได้รับจากผู้ใช้ใน askubuntu.com ตอนนี้ฉันต้องการเรียนรู้วิธีปรับแต่งเพิ่มเติมเพื่อให้ข้อมูลแท็ก ID3 ถูกรักษาไว้ วิธีการที่เชื่อมโยงกับข้อมูลแท็กแถบ ID3 ด้านบนทำให้เหลือน้อยที่สุด (กล่าวคือมีเพียงฟิลด์ชื่อเรื่อง) ใครช่วยสอนฉันถึงวิธีการเขียนเชลล์สคริปต์ได้ไหม เชลล์สคริปต์ได้รับการอัพเดตดังนี้: #!/bin/bash file="$1" flac -cd "$file" | lame --preset fast extreme - "${file%.flac}.mp3" id3cp "$file" "${file%.flac}.mp3" ทำfind . -name '*.flac' …

6
เปรียบเทียบไฟล์ที่อยู่ในไดเรกทอรี 1 แต่ไม่ใช่ไดเรกทอรี 2 หรือไม่
ฉันมีปัญหากับสคริปต์ทุบตีที่ฉันต้องการ ฉันรู้ว่า ls จะแสดงรายการไฟล์ที่อยู่ในไดเรกทอรี แต่ฉันต้องการให้แสดงรายการไดเรกทอรีที่อยู่ใน directory1 แต่ไม่อยู่ใน directory2 แล้วจึงแสดงรายการไฟล์ใน directory2 ที่ไม่ได้อยู่ใน directory1 ในความพยายามที่อ่อนแอฉันพยายาม: ls -al | diff directory1 directory2 ฉันรู้ได้อย่างรวดเร็วว่าทำไมมันไม่ทำงาน ใครสามารถช่วยทุบตีคนบ้าคลั่งทั้งหมดได้หรือไม่?
9 bash  shell-script  ls  diff 

2
เชลล์สคริปต์คำสั่งระยะไกลผ่าน ssh
ฉันพยายามสร้างเชลล์สคริปต์ซึ่งจะดำเนินการคำสั่งบางอย่างที่ฉันต้องการบ่อยๆ ฉันทำการล็อกอิน ssh เพื่อข้ามการถามรหัสผ่านโดยใช้คู่คีย์สาธารณะ / ส่วนตัว และหลังจากการค้นหาบางอย่างฉันสามารถรันโค้ดบางอย่างเช่น: ไฟล์: ssh.sh ssh -X root@172.16.0.1 << EOF cd /root/myDir gedit a.c b.c EOF แต่ฉันไม่เห็นความแตกต่างถ้าฉันชอบ: ssh -X root@172.16.0.1 << EOF cd /root/myDir gedit a.c b.c & EOF &ไม่ได้ทำให้ difference.With ใด ๆ&โดยทั่วไปหลังจากรัน Gedit ก็จะถูกส่งไปยังพื้นหลังและพร้อมรับคำจะมา แต่ฉันไม่ได้รับพรอมต์หลังจาก gedit (แม้ว่าจะมีสิ่งใดในบรรทัดถัดไปที่กำลังถูกประหารชีวิตเช่นเดียวกับที่ฉันใส่echo "Hello"มันกำลังแสดงHelloอยู่) เกิดอะไรขึ้นที่นี่? มีวิธีอื่นอีกไหม? ฉันต้องการทำ SSH และดำเนินการคำสั่งผ่านเชลล์สคริปต์ แต่ฉันไม่ต้องการออกจากระบบหลังจากที่สคริปต์เชลล์ทำงานเสร็จสิ้น ฉันต้องการออกจากระบบด้วยตนเองหลังจากดำเนินการคำสั่งของฉันซึ่งไม่ซ้ำเหมือนสคริปต์ด้านบน

4
แทนที่หลายบรรทัดในไฟล์ข้อความด้วยรูปแบบคงที่
โอเคกำลังมองหาวิธีที่รวดเร็วในการทำสิ่งนี้ ฉันมีรายการหมายเลขบรรทัดที่ต้องเปลี่ยนแปลงในไฟล์ข้อมูลตัวอักษร รูปแบบ 16 บิตในบรรทัดนั้นสามารถเป็นอะไรก็ได้ แต่ฉันต้องเปลี่ยนเพื่อเปลี่ยนเป็นอ่านXXXXXXXXXXXXXXXXตามหมายเลขบรรทัดเท่านั้น อีกครั้งฉันมีรายการหมายเลขบรรทัดยาวฉันรู้ว่าจำเป็นต้องเปลี่ยน ไม่มีรูปแบบที่สังเกตเห็นได้สำหรับบรรทัดที่จำเป็นต้องเปลี่ยน (ฉันไม่ได้เขียนรูปแบบข้อมูล แต่ฉันรู้ว่าต้องเปลี่ยนบรรทัดใดเพื่ออ่าน X ทั้งหมด) ฉันอ่านคำตอบมากมายที่นี่และไม่มีใครจัดการเรื่องนี้ได้ หากยังไม่ชัดเจนฉันจะใช้อีกวิธีหนึ่ง ... เปลี่ยนสาย 26115, 32198, 37256, 40001, 40023 XXXXXXXXXXXXXXXในแฟ้มที่จะอ่าน ฉันมีมากกว่า 100,000 บรรทัดที่ต้องเปลี่ยนไฟล์ 1.9 ล้านบรรทัด

1
ฉันจะสร้างฟังก์ชั่นที่ใช้ชื่อที่มีคำต่อท้ายจำนวนเต็มเป็นอาร์กิวเมนต์และเพิ่มคำต่อท้ายนี้ได้อย่างไร
ฉันต้องมีรหัสเพิ่มอาร์กิวเมนต์เช่น Brad_1 และทำให้เป็น Brad_2 ฉันไม่แน่ใจว่าจะทำเช่นนั้นเพราะอย่างใดอย่างหนึ่งเป็นจำนวนและอื่น ๆ ที่เป็นชื่อ

2
สำรองข้อมูลงานไปยังคอมไพล์ก่อนปิดเครื่อง
ฉันใช้ Ubuntu 16.04 ฉันมีไดเรกทอรีชื่องานที่ฉันต้องการสำรองข้อมูลไปยัง GitHub ทุกครั้งที่ฉันเปิดเครื่องคอมพิวเตอร์ ฉันได้เขียนสคริปต์สำรองและมันทำงานได้ดี แต่ฉันไม่สามารถเรียกใช้ได้ก่อนที่จะปิดเครื่อง กรุณาช่วย. นี่คือเนื้อหาของ backup_work.sh cd /home/kaustab/Work git add . git commit -m "Daily Backup" mkdir /home/kaustab/test git push origin master echo "Backed up" read -n 1 -s -r -p "Press any key to continue"

1
คำสั่งเพื่อแยกค่าระหว่างสองตัวแปรและเก็บไว้ในตัวแปร [ปิด]
ฉันพยายามแยกค่า (ตัวเลข) ระหว่างสองตัวแปรและเก็บค่าไว้ในตัวแปรอื่น ฉันใช้คำสั่ง sed แต่ฉันไม่ได้รับผลลัพธ์ใด ๆ #!/usr/bin/env bash variable1=`cat $1` variable2=`echo "$variable1" | cut -c 18` echo "$variable2" variable3=`echo "$variable1" | cut -c 60` echo "$variable3" string="${variable3}xyz${variable2}" echo $string line=`sed -n '/'"$string"'/,/'"$variable2"'/ p' $1` echo $line โปรดแนะนำวิธีแยกตัวเลขระหว่าง $ searchString และ $ variable2 ให้พูดระหว่าง$ stringซึ่งก็คือ& xyz! และ$ variable2ซึ่งก็คือ: ! ฉันมี …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.