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

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

2
ฉันจะเรียกใช้ในฐานะผู้ใช้รายอื่นได้อย่างไร
นี่คือรหัสทุบตีที่ควรถูกเรียกใช้ ดังนั้นก่อนอื่นทดแทนผู้ใช้เพื่อ openproject และกว่ารันโค้ดทั้งหมด: su openproject -c "bash -l" cd ~/openproject git checkout Gemfile.lock git pull bundle install RAILS_ENV="production" bundle exec rake db:migrate RAILS_ENV="production" bundle exec rake db:seed RAILS_ENV="production" bundle exec rake assets:precompile ฉันได้ลอง chnaging สคริปต์ด้านบนนี้: su - openproject -c "cd ~openproject/openproject" su - openproject -c "git checkout stable" su …
20 bash  debian  sudo  su 

6
วิธีการจับข้อผิดพลาดจากคำสั่งดำเนินการ?
ฉันได้รับมอบหมายให้สร้างสคริปต์การทำให้เซิร์ฟเวอร์แข็งโดยอัตโนมัติและสิ่งหนึ่งที่พวกเขาต้องการก็คือรายงานของเอาต์พุตทั้งหมดของแต่ละคำสั่งที่เรียกใช้งาน ฉันต้องการเก็บข้อความแสดงข้อผิดพลาดภายในสตริงและต่อท้ายในไฟล์ข้อความ สมมติว่าฉันรันคำสั่งนี้: /sbin/modprobe -n -v hfsplus ผลลัพธ์ของการทำงานในเครื่องของฉันจะเป็น: FATAL: Module hfsplus not found ฉันจะเก็บข้อความแสดงข้อผิดพลาดนั้นไว้ในสตริงได้อย่างไร? ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก. ขอบคุณ!
20 bash  scripting  string 

3
Bash เพิ่มช่องว่างต่อท้ายเพื่อจัดเรียงสตริง
รหัสปัจจุบันของฉันมีลักษณะดังนี้: x=${y:0:40}ซึ่งจำกัดความยาวของสตริงไว้ที่ 40 ตัวอักษร ในกรณีที่สตริงมีความยาวน้อยกว่า 40 ตัวอักษรเป็นไปได้หรือไม่ที่จะเติมช่องว่างท้ายท้ายด้วยช่องว่าง? ดังนั้นหากฉัน y="very short text" ฉันอยากให้ y เป็น: y = "ข้อความสั้นมาก(+25 ช่องว่างต่อท้าย) "
20 bash 


3
การอ่านรหัสผ่านโดยไม่แสดงบนหน้าจอใน Bash Scripts
วิธีการอ่านรหัสผ่านในสคริปต์ทุบตีในลักษณะเช่นเครื่องมือที่ไม่แสดงใน terminal? (การเปลี่ยนแบบอักษรเป็นสีดำบนพื้นสีดำอาจทำได้ยากโดยการคัดลอกและวางอย่างง่ายดายดังนั้นจึงไม่ใช่วิธีแก้ปัญหา)
20 bash  password 

4
ยกเว้นตัวแปรสำหรับใช้เป็นเนื้อหาของสคริปต์อื่น
คำถามนี้ไม่เกี่ยวกับวิธีเขียนสตริงตัวอักษรที่ใช้ Escape อย่างเหมาะสม ฉันไม่พบคำถามที่เกี่ยวข้องซึ่งไม่เกี่ยวกับวิธีการหลีกเลี่ยงตัวแปรเพื่อการบริโภคโดยตรงภายในสคริปต์หรือโดยโปรแกรมอื่น ๆ เป้าหมายของฉันคือการเปิดใช้งานสคริปต์เพื่อสร้างสคริปต์อื่น ๆ เนื่องจากงานในสคริปต์ที่สร้างขึ้นจะทำงานที่ใดก็ได้ตั้งแต่ 0 ถึงnครั้งในเครื่องอื่นและข้อมูลที่สร้างขึ้นอาจเปลี่ยนแปลงก่อนที่จะทำงาน (อีกครั้ง) ดังนั้นการดำเนินการโดยตรงผ่านเครือข่ายจะ ไม่ทำงาน. รับทราบตัวแปรที่อาจมีตัวอักษรพิเศษเช่นคำพูดเดียวฉันต้องเขียนออกมาเป็นตัวอักษรสตริงหนีเต็มอย่างเช่นตัวแปรfooที่มีbar'bazควรจะปรากฏในสคริปต์ที่สร้างขึ้นเป็น: qux='bar'\''baz' ซึ่งจะเขียนโดยการต่อท้าย"qux=$foo_esc"บรรทัดอื่นของสคริปต์ ฉันใช้ Perl แบบนี้: foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'" แต่ดูเหมือนว่าเกินความจริง ฉันไม่ประสบความสำเร็จในการทำมันด้วยการทุบตีคนเดียว ฉันได้ลองหลายแบบแล้ว: foo_esc="'${file//\'/\'\\\'\'}'" foo_esc="'${file//\'/'\\''}'" แต่เครื่องหมายสแลชพิเศษอาจปรากฏในเอาต์พุต (เมื่อฉันทำecho "$foo") หรือพวกเขาทำให้เกิดข้อผิดพลาดทางไวยากรณ์ (ต้องการอินพุตเพิ่มเติมหากทำจากเชลล์)

3
grep ไม่ส่งออกจนกว่า EOF หากส่งผ่าน cat
รับตัวอย่างที่น้อยที่สุดนี้ ( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) มันจะออกผลลัพธ์LINE 1และแล้วหลังจากที่สองเอาท์พุทLINE 2, คาดว่าเป็น ถ้าเราไปป์นี้ให้ได้ grep LINE ( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE พฤติกรรมจะเหมือนกับในกรณีก่อนหน้าตามที่คาดไว้ หากอีกวิธีหนึ่งเราจะทำสิ่งนี้เพื่อ cat ( echo "LINE 1" ; sleep 1 ; echo "LINE …
19 bash  grep  pipe 

1
$ {! #} ทำงานอย่างไรในการทุบตีเพื่อรับอาร์กิวเมนต์บรรทัดคำสั่งล่าสุด
จากคู่มือการใช้สคริปต์การทุบตีขั้นสูงเพื่อรับอาร์กิวเมนต์บรรทัดคำสั่งล่าสุด: หรือ: lastarg=${!#} เป็นการ อ้างอิงทางอ้อมกับ$#ตัวแปร โปรดทราบว่าlastarg=${!$#}ไม่ทำงาน
19 bash 

3
รั้งการขยายตัวลึกลับใน Bash
นี้: $ echo {{a..c},{1..3}} ผลิตสิ่งนี้: a b c 1 2 3 ซึ่งเป็นสิ่งที่ดี แต่ยากที่จะอธิบายให้ที่ $ echo {a..c},{1..3} จะช่วยให้ a,1 a,2 a,3 b,1 b,2 b,3 c,1 c,2 c,3 เอกสารนี้อยู่ที่ไหนสักแห่ง? ทุบตีอ้างอิงไม่ได้พูดถึงมัน (แม้ว่ามันจะมีตัวอย่างการใช้มัน)

1
echo [9876543210] แสดง 1 4 5 6 …ทำไม?
โปรดอธิบายว่าทำไม 1 4 5 6 แสดงเป็นคำสั่ง echo สี่ครั้งล่าสุด ฉันตีมันโดยบังเอิญครั้งเดียว แต่ตอนนี้ฉันอยากรู้ว่าทำไมพฤติกรรมนี้เกิดขึ้น ข้อความเหล่านี้ทำงานได้ตามที่คาดไว้ (สำหรับฉัน) $ echo [ 9876543210 ] [ 9876543210 ] $ echo [237890] [237890] ข้อความสะท้อนเหล่านี้แสดงอย่างต่อเนื่อง 1 4 5 6. มีอะไรพิเศษเกี่ยวกับตัวเลขเหล่านี้หรือไม่? $ echo [9876543210] 1 4 5 6 $ echo [abcd9876543210ghi] 1 4 5 6 $ echo [-123456-] 1 4 5 …

3
$ {1: 0: 2} หมายถึงอะไรในบริบทนี้
ฉันกำลังมองเข้าไปในรหัสที่แสดงด้านล่างและจะตรวจสอบการป้อนข้อมูลถ้าอาร์กิวเมนต์แถว / คอลัมน์เริ่มต้นด้วยอย่างใดอย่างหนึ่งหรือ-r -cอะไร${1:0:2}หมายถึงในบริบทนี้? rowArgName="-r" colArgName="-c" if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ] then echo $correctCmdMsg >&2 exit 1 fi

5
รูทเชลล์เปลี่ยนแปลงผิดพลาด ฉันจะเปลี่ยนกลับไปเป็นเปลือกที่ถูกต้องได้อย่างไร
ฉันป้อนผิดพลาด chsh -s /usr/bin แทน chsh -s /bin/bash และตอนนี้ฉันไม่สามารถเข้าสู่รูทเชลล์ฉันจะเริ่มเชลล์ bash ในฐานะรูทด้วยตนเองได้อย่างไร
19 bash  shell 

3
เมื่อใดที่ฉันสามารถใช้ IFS ชั่วคราวเพื่อแยกฟิลด์ได้
ในทุบตีว่าคุณมีvar=a.b.c.แล้ว: $ IFS=. printf "%s\n" $var a.b.c อย่างไรก็ตามการใช้งานดังกล่าวIFSจะมีผลในขณะที่สร้างอาร์เรย์: $ IFS=. arr=($var) $ printf "%s\n" "${arr[@]}" a b c สะดวกมากแน่นอน แต่เอกสารนี้อยู่ที่ไหน การอ่านส่วนต่าง ๆ ของAraysหรือWord Splittingอย่างรวดเร็วในเอกสาร Bash นั้นไม่ได้บ่งชี้อะไรเลย ค้นหาIFSผ่านเอกสารหน้าเดียวไม่ได้ให้คำแนะนำเกี่ยวกับผลกระทบนี้ ฉันไม่แน่ใจว่าเมื่อฉันสามารถทำอย่างน่าเชื่อถือ: IFS=x do something และคาดว่าIFSจะมีผลต่อการแยกฟิลด์
19 bash 

6
พารามิเตอร์ dd-style กับสคริปต์ทุบตี
ฉันต้องการส่ง params ไปที่ bash script สไตล์ dd โดยทั่วไปฉันต้องการ ./script a=1 b=43 เพื่อให้มีผลเช่นเดียวกับ a=1 b=43 ./script ฉันคิดว่าฉันสามารถทำสิ่งนี้ได้ด้วย: for arg in "$@"; do eval "$arg"; done เป็นวิธีที่ดีในการตรวจสอบว่าevalมีความปลอดภัยคือที่"$arg"ตรงกับแบบคงที่ (ไม่ใช้รหัส) การกำหนดตัวแปร? หรือมีวิธีที่ดีกว่าในการทำเช่นนี้? (ฉันต้องการที่จะให้ง่ายนี้)
19 bash 

2
วิธีการ ls โดยไม่ต้องเรียกซ้ำ
ฉันพยายาม ls บางไฟล์ที่มีรูปแบบในไดเรกทอรี ฉันแค่ต้องการสแกนระดับแรกไม่ใช่เรียกซ้ำ สคริปต์ของฉัน: for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*) do echo $i; done คำสั่งข้างต้นสแกนซ้ำ จะทำให้มันสแกนไดเรกทอรีระดับแรกเท่านั้นได้อย่างไร
19 bash  shell-script  ls 

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