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

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

1
ฉันจะถามรหัสผ่านโดยใช้ GUI ในขณะที่ใช้ sudo ในสคริปต์ได้อย่างไร
ฉันใช้ Trisquel GNU / Linux กับ GNOME Flashback Desktop Environment ฉันต้องการพรอมต์รหัสผ่าน GUI สำหรับผู้ใช้เพื่อดำเนินการคำสั่งด้วยsudoในสคริปต์ ตัวอย่างพิจารณาสคริปต์ต่อไปนี้: zenity --question --text="Do you want to install this package?" if [[ $? -eq 0 ]]; then sudo apt-get install package else zenity --warning fi ซึ่งจะต้องดำเนินการดังต่อไปนี้ (Run) คือไม่ได้อยู่ในอาคาร ดังนั้นจึงจำเป็นต้องขอรหัสผ่านเพื่อที่จะเรียกใช้คำสั่งด้วยsudoมิฉะนั้นจะไม่สามารถทำงานได้ ดังนั้นฉันจะถามรหัสผ่านโดยใช้ GUI ได้อย่างไร

1
การแทนที่ $ {! var_name + x} หมายถึงอะไร
ฉันพบสคริปต์ที่มีฟังก์ชันที่ตรวจสอบว่ามีการตั้งค่าตัวแปร แต่ฉันไม่เข้าใจมันเป็นอย่างดี check_if_variable_is_set() { var_name=$1 if [ -z "${!var_name+x}" ]; then false else true fi } เกิดอะไรขึ้นกับการทดแทนนี้

6
Bash - จับคู่ไฟล์แต่ละบรรทัด
คำถามนี้เป็นคำถามที่เกี่ยวข้องอย่างยิ่งที่จะนี้และนี้คำถาม ฉันมีไฟล์ที่มีหลายบรรทัดโดยที่แต่ละบรรทัดเป็นพา ธ ไปยังไฟล์ ตอนนี้ฉันต้องการจับคู่แต่ละบรรทัดกับแต่ละบรรทัดที่แตกต่างกัน (ไม่ใช่ของตัวเอง) ทั้งคู่A Bมีค่าเท่ากับB Aคู่สำหรับจุดประสงค์ของฉันดังนั้นควรสร้างชุดค่าผสมเหล่านี้เพียงชุดเดียว ตัวอย่าง files.dat อ่านแบบนี้ในรูปแบบย่อตัวอักษรแต่ละตัวเป็นเส้นทางไฟล์ (สัมบูรณ์หรือสัมพัทธ์) a b c d e จากนั้นผลลัพธ์ของฉันควรมีลักษณะเช่นนี้: a b a c a d a e b c b d b e c d c e d e โดยเฉพาะอย่างยิ่งฉันต้องการที่จะแก้ปัญหานี้ในทุบตี แตกต่างจากคำถามอื่น ๆ รายการไฟล์ของฉันค่อนข้างเล็ก (ประมาณ 200 บรรทัด) ดังนั้นการใช้ลูปและความจุ RAM จึงไม่มีปัญหา

5
จับรหัสทางออกของคำสั่ง exit
ฉันมีสิ่งนี้ในสคริปต์ทุบตี: exit 3; exit_code="$?" if [[ "$exit_code" != "0" ]]; then echo -e "${r2g_magenta}Your r2g process is exiting with code $exit_code.${r2g_no_color}"; exit "$exit_code"; fi ดูเหมือนว่าจะออกทันทีหลังจากคำสั่ง exit ซึ่งทำให้รู้สึก ฉันสงสัยว่าจะมีคำสั่งง่ายๆที่สามารถให้รหัสออกโดยไม่ต้องออกทันทีหรือไม่ ฉันจะเดา: exec exit 3 exec: exit: not foundแต่จะให้ข้อความแสดงข้อผิดพลาด: ฉันควรทำอย่างไร :)

4
POSIX-ly จะนับจำนวนบรรทัดในตัวแปรสตริงได้อย่างไร
ฉันรู้ว่าฉันสามารถทำได้ใน Bash: wc -l <<< "${string_variable}" โดยพื้นฐานแล้วทุกสิ่งที่ฉันพบเกี่ยวข้องกับ<<<ตัวดำเนินการ Bash แต่ใน POSIX shell <<<นั้นไม่ได้ถูกกำหนดและฉันไม่สามารถหาวิธีอื่นได้เป็นเวลาหลายชั่วโมง ฉันค่อนข้างแน่ใจว่ามีวิธีแก้ปัญหาอย่างง่าย แต่น่าเสียดายที่ฉันไม่พบมัน

3
กำหนดวันสุดท้ายของทุกเดือน
ฉันอ่านจากคำแนะนำในการกำหนดตารางสคริปต์ในวันสุดท้ายของเดือน: หมายเหตุ: ผู้อ่านที่ฉลาดอาจสงสัยว่าคุณจะสามารถตั้งคำสั่งให้ดำเนินการในวันสุดท้ายของทุกเดือนได้อย่างไรเพราะคุณไม่สามารถกำหนดค่าวันที่ให้ครอบคลุมทุกเดือนได้ ปัญหานี้ทำให้เกิดโปรแกรมเมอร์ Linux และ Unix และวางไข่โซลูชั่นที่แตกต่างกันไม่กี่ วิธีการทั่วไปคือการเพิ่มคำสั่ง if-then ที่ใช้คำสั่ง date เพื่อตรวจสอบว่าวันในวันพรุ่งนี้คือ 01: 00 12 * * * if [`date +%d -d tomorrow` = 01 ] ; then ; command1 สิ่งนี้จะตรวจสอบทุกวันเวลา 12.00 น. เพื่อดูว่าเป็นวันสุดท้ายของเดือนหรือไม่และหากเป็นเช่นนั้น cron จะรันคำสั่ง วิธีการ[`date +%d -d tomorrow` = 01 ]ทำงานหรือไม่ แก้ไขให้ถูกต้องthen; command1หรือไม่?
10 shell-script  cron  date  test 

2
มีทางเลือกอื่นสำหรับคำสั่ง `find 'บน linux สำหรับ SunOS หรือไม่?
findคำสั่งบนลินุกซ์มีตัวเลือกมากเมื่อเทียบกับfindคำสั่งบน SunOS หรือ Solaris ฉันต้องการใช้findคำสั่งเช่นนี้: find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r มันทำงานได้ดีอย่างสมบูรณ์บนเครื่อง Linux แต่คำสั่งเดียวกันไม่มีตัวเลือก-printfในเครื่อง SunOS ฉันต้องการปรับแต่งผลงานของฉันใน"%TY-%Tm-%Td %f\n"รูปแบบ โปรดแนะนำทางเลือกใด ๆ สำหรับ SunOS

3
ดำเนินการคำสั่งทุก ๆ X วินาที
ฉันต้องการที่จะดำเนินการคำสั่งนับ 10 วินาทีและมีมันดำเนินการในพื้นหลัง (จึงไม่watch?) คำตอบทั้งหมดแสดงบางอย่างเช่นต่อไปนี้ แต่จะดำเนินการ 11 ถึง 14 วินาที สิ่งนี้จะสำเร็จได้อย่างไร while true; do # perform command that takes between 1 and 4 seconds sleep 10 done

6
เป็นไปได้ไหมที่จะแทนที่“ แล้ว” ด้วยวงเล็บ?
ฉันเรียนรู้วิธีการเขียนโค้ดเป็นCภาษาแรกและการใช้งาน if ( code ) then code fi ทำให้มันยากสำหรับฉันที่จะอ่านโค้ดของฉัน (อย่าถามว่าทำไม) มีสิ่งทดแทนthenหรือไม่? บางสิ่งเช่นนี้ if ( code ) { code } fi

1
การแทนที่ Bash พร้อมตัวแปรที่กำหนดจากรูปแบบ glob
ตัวอย่างด้านล่างอธิบายถึงปัญหา เหตุใดจึงFILENAMEพิมพ์อย่างถูกต้องเมื่อสะท้อนและรับรู้เป็นรูปแบบเมื่อใช้การทดแทน? #!/bin/bash FILEPATH_WITH_GLOB="/home/user/file_*" FILENAME=$(basename "$FILEPATH_WITH_GLOB") echo $FILENAME #file_1234 echo ${FILENAME:1:5} #ile_* <---why is this not ile_1

2
ย้ายไฟล์ แต่เมื่อปิดแล้วเท่านั้น
ฉันต้องการย้ายไฟล์ขนาดใหญ่ที่สร้างโดยกระบวนการภายนอกทันทีที่ปิด คำสั่งทดสอบนี้ถูกต้องหรือไม่ if lsof "/file/name" then # file is open, don't touch it! else if [ 1 -eq $? ] then # file is closed mv /file/name /other/file/name else # lsof failed for some other reason fi fi แก้ไข: ไฟล์แสดงชุดข้อมูลและฉันต้องรอจนกว่ามันจะเสร็จสมบูรณ์เพื่อย้ายมันเพื่อให้โปรแกรมอื่นสามารถทำงานกับมันได้ นั่นเป็นเหตุผลที่ฉันจำเป็นต้องทราบว่ากระบวนการภายนอกเสร็จสิ้นด้วยไฟล์หรือไม่

6
วิธีแยกคู่ค่าคีย์จากคำสั่ง ps
ฉันพยายามดึงชื่อแอปพลิเคชันจากpsคำสั่งเช่นนี้: ps -af -u sas |grep "java"| grep -v "grep" และจะสร้างสิ่งต่อไปนี้: sas 24431 1 0 Oct10 ? 00:51:08 /usr/lib/jvm/java-1.7.0-oracle-1.7.0.25.x86_64/jre/bin/java -Denv=DEV -Dapp.name=myApp -Xms512m -Xmx1g -Dlog.dir=/apps/java/logs ฉันพยายามใช้egrepแต่ดูเหมือนจะไม่ทำงาน: ps -af -u sas|grep "java"| grep -v "grep"| egrep -o "-Dapp.name" ฉันจะได้รับเฉพาะ-Dapp.nameค่า "myApp" ได้อย่างไร

2
การใช้ grep ในคำสั่ง if-else [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ทำไมรหัสของฉันจึงไม่แสดงผลหากมีสตริงที่ป้อนไม่อยู่ในไฟล์ เมื่อฉันป้อนสตริงและมันไม่ได้อยู่ในไฟล์ไม่มีการตอบกลับมันจะวนกลับไปที่จุดเริ่มต้น บางคนสามารถบอกฉันว่ามีอะไรผิดปกติกับรหัสของฉัน while : do echo "Please enter a string" read input_string echo "Please enter the file name too see if that string is present in it - (Enter .abw after)" read input_string1 if grep -q $input_string $input_string1 ; then echo "Your …

6
สคริปต์เพื่อ ssh และเรียกใช้คำสั่งไม่ทำงาน
ด้านล่างเป็นสคริปต์ ฉันต้องการลงชื่อเข้าใช้เซิร์ฟเวอร์หลายเครื่องและตรวจสอบรุ่นเคอร์เนล #!/bin/bash #input server names line by line in server.txt cat server.txt | while read line do sshpass -p password ssh root@$line << EOF hostname uname -r EOF done ฉันคาดว่าผลผลิตที่จะไป .. server1_hostname kernel_version server2_hostname kernel_version และอื่น ๆ .. ฉันใช้สคริปต์นี้กับเซิร์ฟเวอร์ประมาณ 80 แห่งใน server.txt และผลลัพธ์ที่ฉันได้รับก็เหมือน ..... Pseudo-terminal will not be allocated …
10 bash  shell-script  ssh 

5
ลบช่องว่างเครื่องหมายขีดกลางและขีดล่างในชื่อไฟล์หรือไม่
คำสั่งที่ดีในการลบช่องว่างยัติภังค์และขีดล่างจากไฟล์ทั้งหมดในไดเรกทอรีหรือไฟล์ที่เลือกคืออะไร ฉันใช้คำสั่งต่อไปนี้กับ Thunar Custom Actions เพื่อ slugify ชื่อไฟล์: for file in %N; do mv "$file" "$(echo "$file" | tr -s ' ' | tr ' A-Z' '-a-z' | tr -s '-' | tr -c '[:alnum:][:cntrl:].' '-')"; done แต่คำสั่งนั้นจะแทนที่ช่องว่างด้วยเครื่องหมายขีดคั่น / ขีดกลางและอักขระตัวพิมพ์เล็กที่ต่อท้าย ฉันใช้คำสั่งต่อไปนี้ในเทอร์มินัลเพื่อลบช่องว่างออกจากชื่อไฟล์หลายพันรายการในโฟลเดอร์และทำงานได้อย่างรวดเร็ว: rename "s/ //g" * อีกครั้งจะลบช่องว่างเท่านั้นไม่ใช่เครื่องหมายขีดคั่น / ขีดกลางและขีดล่างเช่นกัน เป็นการดีที่ฉันไม่ต้องการช่องว่างขีดกลาง / …

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