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

สคริปต์ที่เขียนด้วยภาษา bash shell คำถามส่วนใหญ่ควรใช้แท็ก / bash และ / shell-script แทน

4
เปลี่ยนเส้นทางไปยัง / dev / null
ฉันกำลังอ่านสคริปต์เปลือกทุบตีตัวอย่าง: #!/bin/bash # This script makes a backup of my home directory. cd /home # This creates the archive tar cf /var/tmp/home_franky.tar franky > /dev/null 2>&1 # First remove the old bzip2 file. Redirect errors because this generates some if the archive # does not exist. Then create a new …
144 bash-script  null 

3
ใช้ & (เครื่องหมายแอมเปอร์แซนด์) ในการวนซ้ำบรรทัดเดียว
ฉันใช้คำสั่งนี้เรียบร้อยแล้วซึ่งเปลี่ยนตัวแปรในไฟล์ปรับแต่งแล้วเรียกใช้งานสคริปต์ Python ภายในลูป: for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py; done เนื่องจากDoMyScript.pyตัวมันเองใช้เวลาประมาณ 30 วินาทีในการวิ่งก่อนที่จะยุติฉันต้องการผลักไสพวกมันให้เป็นแบ็คกราวน์ในขณะที่อีกอันสามารถเกิดใหม่ได้ ฉันได้ลองสิ่งที่ฉันคุ้นเคยแล้วโดยเพิ่มแอมเปอร์แซนด์เป็นด้านล่าง: for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py &; done อย่างไรก็ตามผลลัพธ์นี้มีข้อผิดพลาดด้านล่าง: -bash: ข้อผิดพลาดทางไวยากรณ์ใกล้โทเค็นที่ไม่คาดคิด `; '


3
ตัวแปรเป็นคำสั่ง; eval vs bash -c
ฉันกำลังอ่านสคริปต์ทุบตีคนทำและฉันสังเกตเห็นว่าผู้เขียนไม่ได้ใช้ eval เพื่อประเมินตัวแปรเป็นคำสั่ง ผู้เขียนใช้ bash -c "$1" แทน eval "$1" ฉันถือว่าการใช้ eval เป็นวิธีที่ต้องการและอาจเร็วกว่าอยู่ดี มันเป็นเรื่องจริงเหรอ? มีความแตกต่างในทางปฏิบัติระหว่างทั้งสองหรือไม่? อะไรคือความแตกต่างที่โดดเด่นระหว่างสองสิ่งนี้?

5
ทุบตีใน Linux กับ Mac OS
ฉันกำลังซื้อ iMac ฉันทำงานกับ Linux มาเป็นเวลานานและฉันก็ใช้สคริปต์ทุบตี ฉันสงสัยว่าคำสั่ง bash และคุณสมบัติทั้งหมดนั้นมีใน Mac OS หรือไม่? ใครบ้างมีประสบการณ์กับการเขียนสคริปต์ทุบตี Mac? ฉันขอขอบคุณที่คุณป้อนข้อมูล
27 osx  bash-script 

8
วิธีการตรวจสอบสภาพแวดล้อมเดสก์ทอปในสคริปต์ทุบตี?
ฉันกำลังเขียนbashสคริปต์ที่ต้องรู้สภาพแวดล้อมเดสก์ท็อป (XFCE, Unity, KDE, LXDE, Mate, Cinnamon, GNOME2, GNOME3, ... ) กำลังทำงานอยู่ ฉันจะรับข้อมูลนั้นได้อย่างไร

6
มีเชลล์สคริปต์ IDE ที่รู้จักและใช้กันดีสำหรับ Un * x หรือไม่?
มี IDE ใด ๆ ที่กำหนดเป้าหมายที่เชลล์สคริปต์โดยเฉพาะสคริปต์ทุบตีและ zsh หรือไม่ นี่หมายถึงการมีการเน้นไวยากรณ์สำหรับเชลล์สคริปต์และสภาพแวดล้อมการดีบักที่สำคัญกว่าด้วยคุณสมบัติเช่นเบรกพอยต์การตรวจสอบตัวแปรและการปรับเปลี่ยน ฯลฯ เช่นเดียวกับที่มีให้สำหรับภาษาการเขียนโปรแกรมทั่วไปเช่น Python, Java และ C ยกตัวอย่างเช่น Microsft ของ Windows Powershellมี IDEs เช่น Powershell พลัสและPowerGUI Googling สร้างการรวมกันของShellEdซึ่งเป็นปลั๊กอิน Eclipse สำหรับการแก้ไขเชลล์สคริปต์และ BashEclipseซึ่งเป็นดีบักเกอร์ Bash ที่ทำงานกับ ShellEd; ฉันยังไม่ได้ลองเลย มีเชลล์สคริปต์ IDE อื่น ๆ สำหรับ Un * x คล้ายกับคอมโบนี้หรือไม่? ใครบ้างมีประสบการณ์กับพวกเขาบ้างไหม?
23 bash-script  ide 

9
ฟังก์ชั่นทุบตีที่รับอาร์กิวเมนต์เหมือนภาษาอื่นหรือไม่?
ฉันมีฟังก์ชั่นทุบตีเพื่อตั้งค่า$PATHเช่นนี้ - assign-path() { str=$1 # if the $PATH is empty, assign it directly. if [ -z $PATH ]; then PATH=$str; # if the $PATH does not contain the substring, append it with ':'. elif [[ $PATH != *$str* ]]; then PATH=$PATH:$str; fi } แต่ปัญหาคือฉันต้องเขียนฟังก์ชั่นที่แตกต่างกันสำหรับตัวแปรที่แตกต่างกัน (ตัวอย่างเช่นฟังก์ชั่นอื่นสำหรับ$CLASSPATHชอบassign-classpath()ฯลฯ ) ฉันไม่สามารถหาวิธีส่งอาร์กิวเมนต์ไปยังฟังก์ชัน bash เพื่อให้สามารถเข้าถึงได้โดยการอ้างอิง …
17 bash  bash-script 


5
Bash: การใช้ประเภท (Bash builtins) คืออะไร?
ฉันเจอคำสั่งในสคริปต์ Bash ที่ฉันพบ: find /var/log/abcd -type f คำสั่งดังกล่าวอยู่ในบริบทของการทำความสะอาดไฟล์บันทึก ฉันรู้ว่าสิ่งที่findทำ หลังจากได้เห็น-type fฉันดูหน้าคู่มือด้วยตนเอง ฉันได้เห็นมันใน man page ของBASH_BUILTINS (1) คำอธิบายของแฟล็ก -f ภายใต้typeคำสั่งคือ: - The -f option suppresses shell function lookup, as with the command builtin. ต่อไปนี้เป็นคำถามของฉัน: การใช้งานtypeคืออะไร? ความสำคัญของการ-fตั้งค่าสถานะคืออะไร? การใช้typeกับfindคำสั่งคืออะไร [แก้ไข]: -หลังจากที่ได้อ่านความคิดเห็นทั้งหมดและคำตอบจนถึงตอนนี้ผมอยากจะพูดถึงสาเหตุการเข้าใจผิดของฉันVs-type option in command find type commandทั้งหมดนี้เกิดขึ้นเพราะผมสมมติและจนถึงวันที่ได้เห็นเพียงตัวเลือกสั้น (การทดสอบในกรณีของfindคำสั่ง) ที่มีเครื่องหมายลบเดียว '-' , ls -lตัวอย่างเช่น …
16 bash  bash-script 

1
ดำเนินการคำสั่งที่จัดทำโดยพารามิเตอร์ฟังก์ชัน
ฉันพยายามที่จะสร้างวิธีการฟังก์ชั่นในสคริปต์ทุบตีที่ดำเนินการคำสั่งซึ่งให้กับวิธีการโดยพารามิเตอร์ ความหมายบางอย่างเช่นนี้: special_execute() { # Some code # Here's the point where the command gets executed $@ # More code } special_execute echo "abc" ฉันพยายามแล้วผม$@, "$@", $*, "$*"วิธีการที่ฉันจะทำเช่นนั้น?

1
วิธีตัดรหัสสีออกจาก stdout และ pipe ไปยัง file และ stdout
ฉันมีโปรแกรมที่ใช้printfกับบางtputผสมอยู่ในนั้นและฉันต้องการที่จะท่อส่งออกไป stdout เช่นเดียวกับไฟล์ ฉันต้องการที่จะใช้sedเนื่องจากฉันไม่ต้องการการพึ่งพาที่ไม่จำเป็นในสคริปต์ของฉัน นี่คือสิ่งที่ฉันได้รับจนถึง printf "\n$(tput setaf 6)| $(tput sgr0)$(tput setaf 7)Sourcing files...\033[m\n" | tee install.log ปัญหาเดียวของเรื่องนี้คือไฟล์บันทึกของฉันกำลังรับเอาท์พุทสีทั้งหมดเช่นนี้ ... ^[[36m| ^[(B^[[m^[[37mSourcing files...^[[m ฉันอยากให้มันมี | Sourcing files...

2
การแสดงออกปกติในสคริปต์ทุบตี
นี่เป็นครั้งแรกของฉันที่สคริปต์ทุบตีดังนั้นฉันอาจทำผิดพลาดง่าย โดยทั่วไปฉันพยายามเขียนสคริปต์ที่ได้รับกลุ่มของผู้ใช้และหากพวกเขาอยู่ในกลุ่มที่แน่นอนก็จะเข้าสู่ระบบตามนั้น เห็นได้ชัดว่ามีฟังก์ชั่นเพิ่มเติม แต่ไม่มีจุดที่สร้างเมื่อฉันไม่สามารถใช้ regex ได้! จนถึงตอนนี้ฉันมีสิ่งนี้: #!/bin/bash regex="^([a-zA-Z0-9\-_]+ : [a-zA-Z0-9\-_]+) (usergroup)$" # example output groups="username : username usergroup" echo "$groups" >> /home/jrdn/log if [[ "$groups" =~ $regex ]]; then echo "Match!" >> /home/jrdn/log else echo "No match" >> /home/jrdn/log fi ทุกที่ที่ฉันลอง regex มันใช้งานได้ แต่ในสคริปต์ทุบตีมันเท่านั้นที่เคยออกผลลัพธ์เป็นตามด้วย$groups No matchดังนั้นใครบางคนสามารถบอกฉันว่ามีอะไรผิดปกติกับมัน?

3
สคริปต์เพื่อป้องกันการว่างหน้าจอโดยใช้“ การเลื่อนเมาส์” ไม่ทำงาน
นี่คือความพยายามของฉันในการสร้างสคริปต์ที่จะใช้ "การเลื่อนเมาส์" เพื่อป้องกันไม่ให้หน้าจอว่างขณะดูวิดีโอ ฉันหวังว่าจะใช้ค่าสำหรับกระบวนการ CPU% สูงสุดในtopและหากการใช้งาน CPU สูงกว่า 5% การเลื่อนเมาส์ควรเกิดขึ้น #!/usr/bin/env bash sleep_period=60s while true; do if (( $(top -bn 1 | sed -nrs '8p' | awk '{ print $9 }') -gt 5 )); then while (( $(top -bn 1 | sed -nrs '8p' | awk '{ print $9 }') …

2
ขอรหัสผ่านแบบกราฟิกในสคริปต์ทุบตีและรักษาการตั้งค่าการหมดเวลา sudo เริ่มต้นไว้
sudo -A(SUDO_ASKPASS) ตัวเลือกที่เห็นได้ชัดทำให้เกิด sudo ที่จะสูญเสียการหมดเวลา (เช่น timestamp_timeout) การตั้งค่า ฉันต้องการใช้ตัวเลือก sudo -A แต่ฉันต้องการเก็บการหมดเวลาเริ่มต้น (เช่น 15 นาทีบน Ubuntu) ในสคริปต์ทุบตี ฉันต้องการขอรหัสผ่านของผู้ใช้อย่างปลอดภัยและในกล่องโต้ตอบ GUI แต่ฉันต้องการให้สคริปต์ของฉันแสดงเพียงครั้งเดียว (ไม่ใช่ 50+ ครั้ง) นอกจากนี้ฉันไม่ต้องการเรียกใช้สคริปต์ทั้งหมดของฉันในฐานะผู้ใช้รูทเพราะฉันคิดว่านั่นเป็นความคิดที่ไม่ดี นอกจากนี้ไฟล์ที่สร้างโดยสคริปต์ของฉันมีความเป็นเจ้าของผิดในกรณีนี้ ตัวเลือก sudo -A จะใช้งานได้สำหรับฉันหากยังคงมีการหมดเวลาเริ่มต้น จากคู่มือ sudo: ตัวเลือก: ‑A โดยปกติถ้า sudo ต้องการรหัสผ่านมันจะอ่านจากเทอร์มินัลของผู้ใช้ หากระบุตัวเลือก askA (askpass) โปรแกรมตัวช่วย (อาจเป็นแบบกราฟิก) จะถูกดำเนินการเพื่ออ่านรหัสผ่านของผู้ใช้และส่งรหัสผ่านไปยังเอาต์พุตมาตรฐาน หากตัวแปรสภาพแวดล้อม SUDO_ASKPASS ถูกตั้งค่ามันจะระบุพา ธ ไปยังโปรแกรมตัวช่วย มิฉะนั้นถ้า /etc/sudo.conf มีบรรทัดที่ระบุโปรแกรม …

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