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

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

5
จะสร้างวลีพิเศษที่ขยายได้ใน bash ได้อย่างไร
ฉันพบว่าตัวเองทำ<command> --help | grep <feature>บ่อยมากทุกวัน ฉันสงสัยว่ามันเป็นไปได้ไหมที่จะทำสิ่ง^^ที่ขยายออกไป"--help | grep"จากนั้นฉันก็ทำสิ่งนี้: ls ^^ size ที่จะดำเนินการดังต่อไปนี้: ls --help | grep size

4
ทุบตีให้การสนับสนุนสำหรับการใช้ตัวชี้?
คำถามง่าย ๆ เปลือก bash มีการสนับสนุนการใช้พอยน์เตอร์เมื่อเขียนเชลล์สคริปต์หรือไม่? ฉันคุ้นเคยกับสัญกรณ์การขยายตัว${var[@]}เมื่อทำการวนซ้ำอาร์เรย์$varแต่ไม่ชัดเจนว่านี่เป็นการใช้พอยน์เตอร์เพื่อย้ำข้ามดัชนีอาร์เรย์ ทุบตีให้การเข้าถึงที่อยู่หน่วยความจำเช่นภาษาอื่น ๆ ? หาก bash ไม่สนับสนุนการใช้พอยน์เตอร์เชลล์อื่นจะทำอะไร?
12 bash 

6
การเติมช่องว่างที่ต่อท้ายในสตริงด้วยอักขระอื่น
ฉันต้องการส่งออกhello worldมากกว่า 20 ตัวอักษร printf "%-20s :\n\n" 'hello world!!' # Actual output hello world!! : # Wanted output hello world!!========: อย่างไรก็ตามฉันไม่ต้องการใช้ช่องว่าง แต่ใช้ " = " แทน ฉันจะทำอย่างไร
12 bash  shell  string  printf 

4
bash: การใช้โพรซีเดอร์ find-select ที่ปลอดภัยแบบ whitespace ปลอดภัย
รับชื่อไฟล์เหล่านี้: $ ls -1 file file name otherfile bash ตัวเองทำดีกับช่องว่างที่ฝังตัว: $ for file in *; do echo "$file"; done file file name otherfile $ select file in *; do echo "$file"; done 1) file 2) file name 3) otherfile #? อย่างไรก็ตามบางครั้งฉันอาจไม่ต้องการทำงานกับไฟล์ทุกไฟล์หรือแม้กระทั่งในที่เข้มงวด$PWDซึ่งเป็นที่findมาซึ่งยังจัดการกับช่องว่างในนาม: $ find -type f -name file\* ./file ./file name …

1
วิธีคัดลอกไฟล์ทั้งหมดในโฟลเดอร์โดยไม่รวมไฟล์ที่กำลังเขียนอยู่?
ผมดาวน์โหลดไฟล์หลายไฟล์ไปยังโฟลเดอร์ที่downloadingผ่านHTTPie สคริปต์ทุบตีมีจุดประสงค์เพื่อประมวลผลไฟล์ที่ดาวน์โหลดมาและฉันพยายามคัดลอกไฟล์ที่ดาวน์โหลดไปยังโฟลเดอร์อื่นเช่น find /folder/downloading -type f -exec mv '{}' /folder/downloaded \; แต่ยังคัดลอกไฟล์ซึ่งยังไม่เสร็จ ฉันพยายาม จำกัด การถ่ายโอนไปยังไฟล์เก่าโดยเพิ่ม-mmin +5ไปยังคำสั่ง คำสั่งที่มีประสิทธิภาพในการปล่อยให้ไฟล์กำลังถูกเขียนและโอนย้ายไฟล์ที่ดาวน์โหลดมาเท่านั้น?


3
ไวยากรณ์ที่ถูกต้อง“ $ {PS1-}” และแตกต่างจากธรรมดา“ $ PS1” อย่างไร
ฉันกำลังดูสคริปต์ที่มี: if [ "${PS1-}" ]; then การติดตามนั้นทำให้-ฉันรำคาญเล็กน้อยเพราะดูเหมือนว่าจะไม่ได้ Posix หรือ Bash ไวยากรณ์มาตรฐาน นี่คือไวยากรณ์ที่ซ่อนเร้นอยู่ตลอดกาลหรือเป็นตัวพิมพ์ผิด การอ้างอิงใด ๆ ถึงมาตรฐาน / เอกสารจะได้รับการชื่นชม ปกติฉันจะรหัสมัน if [ "$PS1" ]; then ข้อใดถูกกว่าหรือมีข้อแตกต่างระหว่างกัน


3
วิธีบันทึก / dev / stdout ตำแหน่งเป้าหมายในสคริปต์ทุบตี?
ฉันมีสคริปต์ทุบตีบางอย่างซึ่งต้องการรักษา/dev/stdoutตำแหน่งเดิมไว้ก่อนที่จะแทนที่ไฟล์ descriptor ตัวที่หนึ่งด้วยตำแหน่งอื่น ดังนั้นโดยธรรมชาติฉันเขียนอะไรบางอย่างเช่น old_stdout=$(readlink -f /dev/stdout) และมันไม่ทำงาน อย่างรวดเร็วฉันเข้าใจว่าปัญหาคืออะไร: test@ubuntu:~$ echo $(readlink -f /dev/stdout) /proc/5175/fd/pipe:[31764] test@ubuntu:~$ readlink -f /dev/stdout /dev/pts/18 Obvioulsly $()ทำงานใน subshell ซึ่งถูกไพพ์ไปยังเชลล์พาเรนต์ ดังนั้นคำถามคือ: มีวิธีที่เชื่อถือได้ (กำหนดขอบเขตการพกพาระหว่างการแจกแจง Linux) เพื่อบันทึก/dev/stdoutตำแหน่งเป็นสตริงในสคริปต์ทุบตีหรือไม่?

1
ดูการขยายตัวของตัวแปร Bash สำหรับการดีบั๊กหรือไม่
มีเครื่องมือ / เทคนิคสำหรับการขยายตัวแปรเพื่อให้สามารถอ่านรหัสทุบตีได้ง่ายขึ้นหรือไม่? ตัวอย่างเช่นมันจะแปลงต่อไปนี้: DIR=/var/tmp FILE=${DIR}/file SCRIPT_ROOT=/opt/root TOOL=${SCRIPT_ROOT}/tool.sh ${TOOL} ${FILE} ถึง: DIR=/var/tmp FILE=/var/tmp/file SCRIPT_ROOT=/opt/root TOOL=/opt/root/tool.sh /opt/root/tool.sh /var/tmp/file ฉันกำลังแปลงรหัส BASH เป็น Python และการอ่านไวยากรณ์ BASH นั้นน่าเบื่อ

4
ใช้เคส / ตัวอย่างการปฏิบัติสำหรับ Bash 'builtin exec
พิจารณาจากเอกสารของ Bash 'builtin exec: exec แทนที่เชลล์โดยไม่ต้องสร้างกระบวนการใหม่ โปรดระบุกรณีการใช้งาน / ตัวอย่างการปฏิบัติ ฉันไม่เข้าใจว่าสิ่งนี้สมเหตุสมผลหรือไม่ ฉัน googled และพบเกี่ยวกับI / O เปลี่ยนเส้นทาง คุณช่วยอธิบายให้ดีขึ้นได้ไหม?

4
รายการไฟล์ที่ตรงกับรูปแบบ แต่ไม่สนใจไฟล์ที่ตรงกับรูปแบบอื่น?
สมมติว่าฉันมีไดเรกทอรีที่มีไฟล์ a1, a2, a3, b1, b2, b3 ฉันเพียงต้องการให้ตรงกับไฟล์ที่เริ่มต้นด้วยแต่ไม่ได้มีa 3ฉันพยายามls -I "*3" *a*แต่มันกลับแม้ว่าฉันไม่ต้องการให้ตรงกับa1 a2 a3 a3เป็นไปได้ด้วยlsหรือไม่
12 linux  bash  ls  patterns 

4
วิธีใช้ logrotate ในเชลล์สคริปต์
test.sh #!/bin/bash echo "Hello World" test2.sh #!/bin/bash while true do sh test.sh >> /script_logs/test.log & done ฉันต้องการใช้ logrotate เพื่อควบคุมขนาดของไฟล์บันทึกดังนั้นวิธีการใช้ logrotate หากสถานการณ์เป็นเช่นนี้

1
การใช้คำสั่ง“ time” ในตัวในทุบตีมากกว่าคำสั่งภายนอก
การทำงานกับtimeคำสั่งผมมาในสถานการณ์ที่ฉันควรใช้ในตัวมากกว่าคำสั่งเวลาtime GNU ภายนอก /usr/bin/timeดังนั้นฉันจะทำสิ่งนี้ได้อย่างไร ฉันเห็นบางที่ใช้enableและ / หรือcommandจะช่วย แต่พวกเขาไม่ได้ นี่เป็นกรณีการใช้งาน: watch "time ls" ซึ่งใช้/usr/bin/timeคำสั่งภายนอกซึ่งฉันไม่ต้องการ! สิ่งนี้เกิดขึ้นเมื่อtimeเรียกใช้ฟังก์ชันทุบตีภายในเมื่อฉันรันtime lsบนเทอร์มินัลเช่นนี้ $ time ls โปรดทราบว่าได้รับคำตอบตรงข้ามแน่นอน: ทำให้ทุบตีใช้คำสั่ง `time 'ภายนอกมากกว่าเชลล์ในตัว มีความแตกต่างมากมายกับสองคำสั่ง ภายในtimeมีความแม่นยำมากขึ้น (ซึ่งฉันต้องการ) แต่คำสั่งภายนอกมีตัวเลือกเพิ่มเติม (ซึ่งฉันไม่ต้องการ)

4
ชื่อตัวแปร bash ไดนามิก (ตัวแปร)
ฉันต้องการสร้างลำดับของสตริงแบบไดนามิกโดยจัดการอาเรย์ขององค์ประกอบและสร้างกระบวนการทางคณิตศาสตร์บางอย่าง for name in FIRST SECOND THIRD FOURTH FIFTH; do $name = $(( $6 + 1 )) $name = "${$name}q;d" echo "${$name}"; printf "\n" done ผลที่ปรารถนาจะเป็นดังต่อไปนี้เท่ากับ$60 1q;d 2q;d 3q;d 4q;d 5q;d แต่ฉันได้รับข้อผิดพลาดนี้ reel_first_part.sh: line 18: FIRST: command not found reel_first_part.sh: line 19: ${$name}q;d: bad substitution reel_first_part.sh: line 18: FIRST: command …
12 bash  variable 

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