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

คำถามเฉพาะของ Bourne อีกครั้งของเชลล์ใน GNU เมื่อเทียบกับเชลล์ Bourne / POSIX อื่น ๆ สำหรับคำถามเกี่ยวกับเชลล์ Unix โดยทั่วไปให้ใช้ / เชลล์แท็กแทน

4
Bash: พรอมต์ระยะไกลแบบโต้ตอบ
ฉันมีสคริปต์ที่เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลและตรวจสอบว่ามีการติดตั้งแพคเกจ: ssh root@server 'bash -s' < myscript.sh myscript.sh: OUT=`rpm -qa | grep ntpdate` if [ "$OUT" != "" ] ; then echo "ntpdate already installed" else yum install $1 fi ตัวอย่างนี้สามารถทำให้ง่ายขึ้น นี่คือmyscript2.shสิ่งที่มีปัญหาเดียวกัน: read -p "Package is not installed. Do you want to install it (y/n)?" choise ปัญหาของฉันคือทุบตีไม่สามารถอ่านคำตอบของฉันแบบโต้ตอบ มีวิธีดำเนินการสคริปต์ท้องถิ่นจากระยะไกลโดยไม่สูญเสียความสามารถในการแจ้งผู้ใช้หรือไม่
16 bash  shell-script  ssh  stdin  read 

3
รอการใช้คำสั่งใน Linux หรือไม่
#!/bin/bash function back() { sleep $1 exit $2 } back $1 $2 & b=$! if `wait $!`;then echo success else echo failure fi bash-3.00# ./back 300 0 failure bash-3.00# ./back 300 1 failure ผมคาดหวังว่าsuccessเป็นสถานะออกเมื่อฉันส่ง 0 failureแต่ฉันยังคงได้รับ นอกจากนี้waitไม่ต้องรอเป็นเวลา 300 วินาที แต่ฉันได้รับข้อความทันที ฉันถือว่า$!เป็นลูกของ$$สคริปต์ ไม่ใช่เหรอ สามารถจับสถานะทางออกของการรอได้exit_status=$(wait $!)หรือไม่? if ! ((exit_status));then echo sucess else …

2
สิ่งใดอาจทำให้ประวัติทุบตีของฉันถูกล้างอย่างไม่คาดคิด
วันนี้ฉันสังเกตเห็นว่าประวัติทุบตีของฉันถูกล้างออกอย่างสมบูรณ์ ฉันไม่ได้ดำเนินการhistory -cหรือลบ.bash_historyไฟล์ นอกเหนือจากการลบ.bash_historyไฟล์history -cแล้วจะล้างประวัติทุบตีได้อย่างไร?


2
วิธีการวนซ้ำอาร์กิวเมนต์ในสคริปต์ทุบตี
ฉันต้องการเขียนสคริปต์ทุบตีด้วยจำนวนอาร์กิวเมนต์ที่ไม่รู้จัก ฉันจะเดินผ่านข้อโต้แย้งเหล่านี้และทำอะไรกับพวกเขาได้อย่างไร ความพยายามที่ผิดจะมีลักษณะเช่นนี้: #!/bin/bash for i in $args; do echo $i done
16 bash  shell  arguments 

6
การตรวจจับเซสชัน X ในสคริปต์ทุบตี (.bashrc ฯลฯ )
เมื่อเร็ว ๆ นี้ฉันใส่xset b off. bashrc ของฉัน ตอนนี้ฉันรำคาญกับข้อผิดพลาดที่ปรากฏขึ้นเมื่อฉันเข้าสู่ระบบผ่านทาง tty หรือผ่าน ssh คือนอกเซสชั่น X สิ่งแรกที่อยู่ในใจของฉันคือ[[ -z "$SOME_VAR" ]] && xset b off(เอาล่ะปรากฎว่าตัวแปรทดสอบที่ตั้งไว้และความว่างเปล่าเป็นคำถามที่แตกต่างกัน) แต่ SOME_VAR ใดที่ถูกต้อง ดังนั้นฉันจึงแยกsetเอาท์พุทของ tty และเอาต์พุตของ urxvt setเพื่อดูว่าตัวแปรใดถูกตั้งค่าเป็น X และหายไปใน tty ตามที่คาดไว้มีความแตกต่างค่อนข้างมาก (แสดงเฉพาะสิ่งที่ดูเหมือนเกี่ยวข้องกับฉัน): DESKTOP_SESSION DISPLAY GDMSESSION SESSION_MANAGER WINDOWID WINDOWPATH XAUTHORITY XDG_SESSION_COOKIE XDG_CONFIG_DIRS XDG_DATA_DIRS XDG_MENU_PREFIX ข้อใดที่ถูกต้องและเป็นสากลมากที่สุดในการทดสอบเพื่อตรวจสอบว่าฉันอยู่ในช่วง X หรือไม่? มีสิ่งใดบ้างที่สามารถใช้ข้ามแพลตฟอร์มและแพลตฟอร์มและสภาพแวดล้อมเดสก์ท็อปได้มากเท่าที่จะเป็นไปได้ หรือมีวิธีที่ดีกว่าการทดสอบตัวแปรสภาพแวดล้อม?

3
การใช้งานในทางปฏิบัติสำหรับการย้ายไฟล์อธิบาย
ตามหน้าคนทุบตี: ผู้ประกอบการเปลี่ยนเส้นทาง [n]<&digit- ย้าย file descriptor digitไปที่ file descriptor nหรืออินพุตมาตรฐาน (file descriptor 0) หากnไม่ได้ระบุไว้ digitถูกปิดหลังจากการพิมพ์nซ้ำ การย้าย "file descriptor" ไปยังอีกอันหนึ่งหมายความว่าอะไร? สถานการณ์ทั่วไปสำหรับการฝึกเช่นนี้มีอะไรบ้าง

4
หลีกเลี่ยงข้อผิดพลาดเนื่องจากเครื่องหมายดอกจันที่ไม่ขยาย
ในทุบตีฉันมักจะใช้ for-loops ดังต่อไปนี้ for file in *.type; do sommecommand "$file"; done; *.typeในการดำเนินการสำหรับทุกไฟล์ที่ตรงกัน หากไม่พบไฟล์ที่มีจุดจบนี้ในไดเรกทอรีใช้งานเครื่องหมายดอกจันจะไม่ถูกขยายและโดยปกติฉันจะได้รับข้อความแสดงข้อผิดพลาดที่บอกว่า somecommand ไม่พบไฟล์ ฉันสามารถคิดได้ทันทีหลายวิธีเพื่อหลีกเลี่ยงข้อผิดพลาดนี้ แต่การเพิ่มเงื่อนไขก็ไม่ได้ดูสวยงามมากนัก มีวิธีที่สั้นและสะอาดในการบรรลุเป้าหมายนี้หรือไม่?
16 bash  wildcards  for 

5
วิธีแก้ไข bash หรือ auto run / bin / bash ในการเข้าสู่ระบบ SSH
เมื่อเข้าสู่ระบบrootที่เซิร์ฟเวอร์ของฉันทุกอย่างทำงานได้ดี แต่เมื่อฉันเข้าสู่ระบบเนื่องจากmyusernameทุบตีทำงานไม่ถูกต้อง บรรทัดเริ่มต้นด้วย: $ แทน myusername@myserver:~$ และปุ่มพิเศษทั้งหมดเช่นแป้นลูกศรแป้นแท็บ ฯลฯ จะไม่ทำงาน เมื่อฉันพิมพ์bin/bashมันทำงานได้อีกครั้ง แต่ฉันต้องการแก้ไขปัญหาหรือทำงานอัตโนมัติbin/bashในการเข้าสู่ระบบ ฉันจะแก้ไขสิ่งนี้ได้อย่างไร
16 ssh  bash 

1
การสร้างแถบความคืบหน้าด้วย“ กล่องโต้ตอบ” จากเอาต์พุต rsync
ฉันกำลังมองหาวิธีในการกรอง / เปลี่ยนเส้นทาง rsync ในลักษณะที่สามารถป้อนไปยังคำสั่ง "dialog --gauge" ดังนั้นฉันสามารถดูแถบความคืบหน้าที่ดีในระหว่างการซิงค์ไฟล์ ขณะนี้ฉันเพิ่งทดสอบโดยตรงที่พร้อมท์ แต่ฉันวางแผนที่จะทำในเชลล์สคริปต์ (ทุบตี) ฉันดูรอบ ๆ อินเทอร์เน็ตและพบบิตและชิ้นส่วน แต่ฉันก็ยังขาดอะไรบางอย่างที่จะทำให้มันใช้งานได้ (ข้อจำกัดความรับผิดชอบ: นี่อาจเป็นวิธีที่ผิดโดยสิ้นเชิงและเป็นการเปลี่ยนเส้นทาง / การวางท่อที่น่าตกใจ) สิ่งที่ฉันได้รวบรวม: rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data | awk -f /home/user/rsync.awk | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70 ก่อนอื่นฉันมีคำสั่ง rsync …
16 linux  bash  scripting  awk  rsync 

4
สไตล์ / แนวปฏิบัติที่ดีสำหรับตัวคั่นในชื่อไฟล์ (หรือไดเรกทอรี) [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันไม่แน่ใจว่านี่เป็นคำถามที่ "ถูกต้อง" หรือไม่ที่จะโพสต์ที่นี่ ฉันอาจถามเพิ่มเติมเกี่ยวกับ "ความคิดเห็น" มากกว่าคำตอบที่เป็นหมวดหมู่จริง ๆ (จากคำตอบที่ได้ผลหรือไม่และก็เป็นเช่นนั้น) ฉันสงสัยว่าตัวแยกชื่อจะเป็นมิตรกับลินุกซ์มากที่สุด(หรือเฉพาะเจาะจงมากขึ้นคือเป็นมิตรกับ Bash ) และเป็นมิตรกับมนุษย์ในเวลาเดียวกัน สมมติว่าฉันต้องการสร้างไดเรกทอรีที่มีบางสิ่งที่เกี่ยวข้องกับMr. Foo Bar ( Fooเป็นชื่อแรก, Barเป็นนามสกุล) การมีชื่อ " Foo-Bar/" นั้นสะดวกมาก -เป็นตัวละคร "ปกติ" ไม่จำเป็นต้องหลบหนีมันแสดงให้เห็นอย่างชัดเจนFooและBarเป็นสองสิ่งที่แยกจากกัน ... Nice ตอนนี้ " Foo.Bar" ค่อนข้างยุ่งยาก บางคนอาจคิดว่าFoo.Barเป็นไฟล์ (โดยคร่าวๆก่อนโดยเฉพาะถ้าคุณไม่มีเทอร์มินัลที่เปิดใช้งานการระบายสี) โดยที่ " Foo" เป็นชื่อไฟล์และนามสกุลไฟล์ " Bar" ฉันยังสามารถใช้ " Foo Bar" …
16 linux  bash  filenames 

4
เปลี่ยนแบบอักษรในคำสั่ง echo
เป็นไปได้หรือไม่ที่จะเปลี่ยนคุณลักษณะแบบอักษรของเอาต์พุตของ echo ใน zsh หรือ bash? สิ่งที่ฉันต้องการเป็นสิ่งที่คล้ายกับ: echo -n "This is the font: normal " echo -n $font=italic "italic," echo -n $font=bold "bold," echo -n "and" echo -n $font=small "small". เพื่อที่จะพิมพ์: "นี่คือตัวอักษร: ปกติ, ตัวเอียง , ตัวหนา , ขนาดเล็ก " ในบรรทัดของข้อความ
16 bash  shell  zsh  fonts 


3
Bash scripting และไฟล์ขนาดใหญ่ (ข้อผิดพลาด): อินพุตพร้อม read builtin จากการเปลี่ยนเส้นทางให้ผลลัพธ์ที่ไม่คาดคิด
ฉันมีปัญหาแปลก ๆ bashกับไฟล์ขนาดใหญ่และ นี่คือบริบท: ฉันมีไฟล์ขนาดใหญ่: 75G และ 400,000,000 บรรทัดขึ้นไป (เป็นไฟล์บันทึกที่ไม่ดีฉันปล่อยให้มันเติบโต) 10 ตัวอักษรแรกของแต่ละบรรทัดคือการประทับเวลาในรูปแบบ YYYY-MM-DD ฉันต้องการแยกไฟล์: หนึ่งไฟล์ต่อวัน ฉันลองใช้สคริปต์ต่อไปนี้ซึ่งใช้งานไม่ได้ คำถามของฉันเป็นเรื่องเกี่ยวกับสคริปต์นี้ไม่ได้ทำงานไม่ได้แก้ปัญหาทางเลือก while read line; do new_file=${line:0:10}_file.log echo "$line" >> $new_file done < file.log หลังจากตรวจแก้จุดบกพร่องฉันพบปัญหาในnew_fileตัวแปร สคริปต์นี้: while read line; do new_file=${line:0:10}_file.log echo $new_file done < file.log | uniq -c ให้ผลการร้อง (ฉันใส่xes เพื่อเก็บข้อมูลเป็นความลับตัวอักษรอื่น ๆ เป็นของจริง) สังเกตdhและสตริงที่สั้นกว่า: …
16 bash 


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