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

สำหรับคำถามเกี่ยวกับสคริปต์ที่เขียนขึ้นสำหรับเชลล์คำสั่ง Bash สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาด / ข้อผิดพลาดทางไวยากรณ์โปรดตรวจสอบด้วยโปรแกรม shellcheck (หรือในเซิร์ฟเวอร์ shellcheck เว็บที่ https://shellcheck.net) ก่อนโพสต์ที่นี่ คำถามเกี่ยวกับการใช้งานอินเทอร์แอคทีฟของ Bash นั้นมีแนวโน้มที่จะอยู่ในหัวข้อของผู้ใช้ขั้นสูงมากกว่าในสแต็คโอเวอร์โฟลว์

9
อ่านตัวแปรใน bash ด้วยค่าเริ่มต้น
ฉันต้องการอ่านค่าจากเทอร์มินัลในสคริปต์ทุบตี ฉันต้องการให้ค่าเริ่มต้นที่ผู้ใช้สามารถเปลี่ยนแปลงได้ # Please enter your name: Ricardo^ ในสคริปต์นี้พรอมต์คือ "โปรดป้อนชื่อของคุณ:" ค่าเริ่มต้นคือ "Ricardo" และเคอร์เซอร์จะอยู่หลังค่าเริ่มต้น มีวิธีการทำเช่นนี้ในสคริปต์ทุบตี?
191 bash  shell 

3
รันคำสั่งเชลล์ซ้ำ ๆ จนกว่าจะล้มเหลว?
ฉันได้เขียนแบบทดสอบฟัซซี่ที่ล้มเหลวอย่างไม่น่าเชื่อ ฉันได้เพิ่มรหัสแก้ไขข้อบกพร่องบางส่วน แต่ตอนนี้ฉันต้องการเรียกใช้การทดสอบจนกว่าจะล้มเหลวเพื่อให้ฉันสามารถรวบรวมผลลัพธ์การแก้ปัญหา ฉันได้ตั้งค่าการทดสอบเพื่อให้สามารถใช้งานได้โดย: ./runtest ทางออกปัจจุบันของฉันคือการเขียนuntilfailสคริปต์: #!/bin/bash $@ while [ $? -eq 0 ]; do $@ done จากนั้นใช้: untilfail ./runtest มีวิธีแก้ไขที่ง่ายกว่านี้ไหม?
191 bash 

16
เปลี่ยนไดเรกทอรีปัจจุบันจากสคริปต์ Bash
เป็นไปได้ไหมที่จะเปลี่ยนไดเรกทอรีปัจจุบันจากสคริปต์? ฉันต้องการสร้างโปรแกรมอรรถประโยชน์สำหรับการนำทางไดเรกทอรีใน Bash ฉันสร้างสคริปต์ทดสอบที่มีลักษณะดังนี้: #!/bin/bash cd /home/artemb เมื่อฉันรันสคริปต์จาก Bash shell ไดเรกทอรีปัจจุบันจะไม่เปลี่ยนแปลง เป็นไปได้หรือไม่ที่จะเปลี่ยนไดเรกทอรีเชลล์ปัจจุบันจากสคริปต์?
190 bash  environment 

6
วิธีละเว้นคำสั่ง xargs หากอินพุต stdin ว่างเปล่า?
พิจารณาคำสั่งนี้: ls /mydir/*.txt | xargs chown root ความตั้งใจที่จะเปลี่ยนเจ้าของไฟล์ข้อความทั้งหมดmydirเป็นรูท ปัญหาคือว่าถ้าไม่มี.txtไฟล์ในmydirxargs แล้ว thows ข้อผิดพลาดบอกว่าไม่มีเส้นทางที่ระบุ นี่เป็นตัวอย่างที่ไม่เป็นอันตรายเนื่องจากมีข้อผิดพลาดเกิดขึ้น แต่ในบางกรณีเช่นในสคริปต์ที่ฉันต้องใช้ที่นี่พา ธ ว่างจะถือว่าเป็นไดเรกทอรีปัจจุบัน ดังนั้นถ้าฉันเรียกใช้คำสั่ง/home/tom/นั้นถ้าไม่มีผลลัพธ์ls /mydir/*.txtและไฟล์ทั้งหมดภายใต้/home/tom/มีเจ้าของเปลี่ยนเป็นรูต ดังนั้นฉันจะให้ xargs เพิกเฉยกับผลลัพธ์ที่ว่างเปล่าได้อย่างไร
189 bash  centos  xargs 




5
วิธีสร้าง hex dump ของไฟล์ที่บรรจุเฉพาะตัว hex โดยไม่มีช่องว่างใน bash?
ฉันจะสร้างฐานข้อมูลเลขฐานสิบหกที่ไม่ได้แก้ไขของไฟล์ไบนารีใน Linux โดยใช้ bash ได้อย่างไร odและhexdumpคำสั่งทั้งช่องว่างแทรกในการถ่ายโอนข้อมูลและนี่คือไม่เหมาะ มีวิธีการเขียนสตริงยาว ๆ ที่มีอักขระฐานสิบหกทั้งหมดลบช่องว่างหรือขึ้นบรรทัดใหม่ในผลลัพธ์หรือไม่
188 linux  bash  hex 

13
ผ่านอาร์เรย์เป็นพารามิเตอร์ในทุบตี
ฉันจะส่งผ่านอาร์เรย์เป็นพารามิเตอร์ไปยังฟังก์ชัน bash ได้อย่างไร หมายเหตุ:หลังจากไม่พบคำตอบที่นี่ใน Stack Overflow ฉันโพสต์คำตอบที่ค่อนข้างหยาบของฉันเอง อนุญาตให้ส่งผ่านได้เพียงหนึ่งอาเรย์เท่านั้นและเป็นองค์ประกอบสุดท้ายของรายการพารามิเตอร์ ที่จริงแล้วมันไม่ได้ผ่านอาร์เรย์เลย แต่รายชื่อขององค์ประกอบของมันซึ่งถูกประกอบเข้าอีกครั้งในอาร์เรย์โดยเรียกว่า _function () แต่มันได้ผลสำหรับฉัน หากใครรู้วิธีที่ดีกว่าอย่าลังเลที่จะเพิ่มที่นี่
188 arrays  bash 

13
ตรวจสอบว่าฟังก์ชั่นที่มีอยู่ในทุบตี
ขณะนี้ฉันกำลังทำการทดสอบหน่วยที่ดำเนินการจากการทุบตี การทดสอบหน่วยจะเริ่มต้นใช้งานและทำความสะอาดในสคริปต์ทุบตี สคริปต์นี้เป็นปกติมีฟังก์ชัน init (), execute () และ cleanup () แต่พวกเขาไม่ได้บังคับ ฉันต้องการทดสอบว่าพวกเขาเป็นหรือไม่ได้กำหนดไว้ ก่อนหน้านี้ฉันทำแบบนี้โดยการ greping และ seding แหล่งที่มา แต่ดูเหมือนว่าผิด มีวิธีที่สง่างามกว่านี้หรือไม่? แก้ไข: sniplet ต่อไปนี้ทำงานเหมือนเครื่องราง: fn_exists() { LC_ALL=C type $1 | grep -q 'shell function' }

4
รหัสคำสั่งที่ไม่ถูกต้องแม้จะมีระยะเวลาหลบหนีโดยใช้ sed
ถูกบังคับให้ใช้ CVS สำหรับไคลเอนต์ปัจจุบันและเปลี่ยนที่อยู่สำหรับ repo ระยะไกล วิธีเดียวที่ฉันสามารถค้นหาเพื่อเปลี่ยนที่อยู่ระยะไกลในรหัสท้องถิ่นของฉันคือการค้นหาซ้ำและแทนที่ อย่างไรก็ตามด้วยคำสั่ง sed ฉันคาดว่าจะทำงาน: find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \; ฉันได้รับข้อผิดพลาดสำหรับไฟล์ทุกไฟล์: sed: 1: ".//file/path ...": invalid command code . ฉันพยายามที่จะหลบหนีจากช่วงเวลาในการแข่งขัน / แทนที่ แต่ไม่ได้แก้อะไรเลย
187 bash  macos  sed 

7
ตัวแปรที่ถูกแก้ไขภายในลูป while ไม่ได้ถูกจดจำ
ในโปรแกรมต่อไปนี้ถ้าฉันตั้งค่าตัวแปร$fooเป็นค่า 1 ภายในifคำสั่งแรกมันจะทำงานในแง่ที่ว่าค่านั้นถูกจดจำหลังจากคำสั่ง if อย่างไรก็ตามเมื่อฉันตั้งค่าตัวแปรเดียวกันเป็นค่า 2 ภายในคำสั่งifที่อยู่ในwhileคำสั่งมันจะถูกลืมหลังจากwhileวนรอบ มันทำงานเหมือนกับว่าฉันกำลังใช้สำเนาของตัวแปร$fooภายในwhileลูปและฉันกำลังแก้ไขเฉพาะสำเนานั้น นี่คือโปรแกรมทดสอบที่สมบูรณ์: #!/bin/bash set -e set -u foo=0 bar="hello" if [[ "$bar" == "hello" ]] then foo=1 echo "Setting \$foo to 1: $foo" fi echo "Variable \$foo after if statement: $foo" lines="first line\nsecond line\nthird line" echo -e $lines | while read line do …
187 bash  while-loop  scope  sh 

14
ค้นหา -exec ฟังก์ชั่นเชลล์ใน Linux?
มีวิธีการfindดำเนินการฟังก์ชั่นฉันกำหนดในเปลือกหรือไม่ ตัวอย่างเช่น: dosomething () { echo "doing something with $1" } find . -exec dosomething {} \; ผลลัพธ์ที่ได้คือ: find: dosomething: No such file or directory มีวิธีที่จะได้รับfindของ-execที่จะเห็นdosomething?
185 linux  bash  shell  find  bsd 



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