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

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

4
ฉันจะหาแหล่งไฟล์ bashrc ได้ทุกครั้งที่ 'ชัดเจน'
นี่อาจเป็นความคิดที่ไม่ดี ยิ่งฉันคิดถึงมันมากเท่าไหร่ฉันก็ยิ่งตระหนักว่าฉันไม่ควรทำ ... แต่ฉันพยายามแล้วก็ล้มเหลวดังนั้นฉันจึงอยากรู้วิธีที่จะทำแม้ว่ามันจะเป็นความคิดที่ไม่ดีก็ตาม สิ่งที่ฉันต้องการสำหรับไฟล์ bashrc นั้นจะต้องมีแหล่งที่มาทุกครั้งที่ฉันรันclearคำสั่ง เหตุผลนี้เป็นรูปธรรมอย่างสมบูรณ์ ฉันมีข้อมูลระบบสะท้อนออกมาเมื่อฉันมา bashrc และมันยอดเยี่ยมสำหรับฉันและฉันต้องการให้มันอยู่ด้านบนทุกครั้งที่ฉันชัดเจน ฉันพยายามตั้งชื่อแทนบางอย่างclearแต่ฉันยังคงวิ่งวนซ้ำไปเรื่อย ๆ การแก้ไขที่ชัดเจนคือการเปลี่ยนนามแฝงเป็นอย่างอื่นนอกจากชัดเจนเพื่อให้ฉันสามารถเรียกใช้คำสั่งที่ชัดเจนในนามแฝงโดยไม่รบกวน แต่ฉันพิมพ์ชัดเจนบ่อยครั้งที่มันฝังอยู่ในสมองของฉัน ณ จุดนี้ ฉันต้องการที่จะพิมพ์ชัดเจนและทำให้มันชัดเจนและแหล่งที่มาไฟล์ bashrc
13 bash  bashrc 

4
ฉันจะตรวจสอบว่าฉันสามารถเข้าสู่เซิร์ฟเวอร์ผ่านทาง ssh ได้อย่างไร?
ฉันมีรายชื่อเซิร์ฟเวอร์: cat list.txt 10.10.10.10 servera 10.11.10.10 serverb ฉันจะตรวจสอบว่าฉันสามารถเข้าสู่ระบบผ่านทาง ssh ได้อย่างไร? ฉันหมายถึงโดยค่าเริ่มต้นฉันควรจะสามารถเข้าสู่ระบบผ่านทางคีย์ ssh auth .. ดังนั้นในระยะสั้นฉันต้องการวิธีแก้ปัญหาที่เรียงลำดับบรรทัด (เซิร์ฟเวอร์) ใน list.txt ดังนี้: เซิร์ฟเวอร์ที่ฉันสามารถเข้าสู่ระบบผ่านทางคีย์ ssh เซิร์ฟเวอร์ที่ถามรหัสผ่าน (ไม่ทราบรหัสผ่านแน่นอน .. ) เซิร์ฟเวอร์ที่ไม่สามารถเข้าถึงได้
13 bash  ssh 

2
ฉันจะกำหนดฟังก์ชันทุบตีใหม่ในแง่ของคำนิยามเก่าได้อย่างไร
มีวิธีใดที่ฉันสามารถกำหนดฟังก์ชันทุบตีใหม่ในแง่ของนิยามเก่าหรือไม่? ยกตัวอย่างเช่นผมต้องการที่จะเพิ่มบล็อกของรหัสต่อไปคำนำของฟังก์ชั่นcommand_not_found_handle (), # Check if $1 is instead a bash variable and print value if it is local VAL=$(eval echo \"\$$1\") if [ -n "$VAL" ] && [ $# -eq 1 ]; then echo "$1=$VAL" return $? fi ขณะนี้มีการกำหนดไว้ใน /etc/profile.d/PackageKit.sh และมีที่มาจากสคริปต์เริ่มต้นระบบ bash ด้วยวิธีนี้ฉันสามารถค้นหาค่าของตัวแปรสภาพแวดล้อมที่พรอมต์คำสั่งเพียงพิมพ์ชื่อตัวแปร (และระบุว่าไม่มีคำสั่งดังกล่าวโดยใช้ชื่อนั้น) เช่น user@hostname ~:$ LANG LANG=en_AU.utf8 …
13 bash  function 

4
ฉันจะเลือกไฟล์เฉพาะในไดเรกทอรีอื่นโดยใช้ bash ได้อย่างไร
ฉันต้องการแสดงรายการ (หรือลบหรือดำเนินการอื่น ๆ ) ในบางไฟล์ในไดเรกทอรีเช่นนี้ $ ls /opt/somedir/ aa bb cc aa.txt bb.txt cc.txt $ ls /opt/somedir/(aa|bb|cc) ## pseudo-bash :p aa bb cc ฉันจะบรรลุสิ่งนี้ได้อย่างไร (โดยไม่ต้อง cd-ing ไปที่ไดเรกทอรีก่อน)

3
วิธีการตั้งค่ากับดักในฟังก์ชั่นทุบตี?
ฉันสามารถตั้งค่าtrapในสคริปต์ทุบตี แต่ไม่ใช้ฟังก์ชันทุบตี ตัวอย่างเช่นsourceรหัสด้านล่างและเรียกใช้fตอนนี้ลองCtrl+ Cมันไม่ถูกดักจับ! วิธีการตั้งค่าtrapในฟังก์ชั่นทุบตี? 4 trap ctrl_c INT 5 6 ctrl_c () { 7 echo "** Trapped CTRL-C" 8 } 9 10 11 f () { 12 for i in `seq 1 100`; do 13 sleep 1 14 echo -n "." 15 done 16 }
13 bash  trap 

3
การปรับแต่ง bash shell: คำสั่งตัวหนา / สี
มีจำนวนบทเรียน / โพสต์ออนไลน์ (เช่นhttp://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/ ) PS1เกี่ยวกับวิธีการปรับแต่งรวดเร็วของคุณในทุบตีโดยการตั้งค่า มีวิธีในการปรับแต่งสี / ตัวหนาของคำสั่งที่ฉันพิมพ์หรือไม่? ในคำอื่น ๆ ตัวอย่างเช่นสมมติว่าฉันต้องการพรอมต์สีเขียวคำสั่งสีน้ำเงินตัวหนาแล้วส่งออกในสีใดก็ตามที่จะเป็นค่าเริ่มต้น ในตัวอย่างด้านล่างที่ผมรู้อยู่แล้วว่าวิธีที่จะทำให้ " joe>" แสดงเป็นสีเขียว, สีฟ้า, ตัวหนา, PS1สิ่งโดยการตั้งค่า แต่มีวิธีที่ฉันสามารถgit statusแสดงเป็นตัวหนาเช่น? joe> git status # On branch master # Your branch is ahead of 'origin/master' by 2 commits. # ...
13 bash  colors 

2
จะส่งตัวแปรไปยังสคริปต์ที่เปิดใช้งานรูทได้อย่างปลอดภัยได้อย่างไร
คำถามนี้เป็นคำถามทั่วไปและไม่เพียง แต่ใช้กับสถานการณ์ของฉันเท่านั้น แต่ ... ฉันมีเครื่องมือ busybox ขนาดเล็กที่ฉันต้องการให้ผู้ใช้ที่ไม่ใช่รูทสามารถรันสคริปต์เฉพาะกับสิทธิ์พิเศษของรูทได้ ตัวอย่างเช่นบางสิ่งบางอย่างเช่นสคริปต์ขนาดเล็กนี้เพื่อเปิดใช้งาน DHCP โดยที่ตัวแปรเดียว ( $1) เพื่อส่งเข้าสู่ cmdline (!!) คือชื่อโฮสต์ที่จะส่งออก: #!/bin/bash udhcpc -b -i eth0 -h $1 การเรียกใช้ udhcpc เช่นนี้ต้องใช้การเข้าถึงรูทดังนั้นฉันวางแผนที่/etc/sudoersจะแก้ไขเพื่อให้มีบรรทัดนี้: joe ALL = NOPASSWD: /path/to/enable_dhcp.sh ซึ่งควรเปิดใช้งาน "joe" เพื่อให้เรียกใช้สคริปต์นั้นได้อย่างง่ายดายด้วยสิทธิ์พิเศษของรูทเพียงแค่เรียกใช้: sudo /path/to/enable_dhcp.sh และไม่ถูกถามหารหัสผ่าน (ซึ่งเป็นสิ่งที่ฉันต้องการเนื่องจากฉันต้องการให้โจสามารถเขียนสคริปต์นี้ได้) ตอนนี้ .. ฉันรู้แล้ว (หรืออย่างน้อยฉันก็คิดว่า) การใช้$1สคริปต์ที่สามารถรันได้อย่างง่ายดายด้วยสิทธิ์พิเศษของรูทเป็นแนวคิดที่น่ากลัวเพราะคุณสามารถฉีดสิ่งที่คุณต้องการได้ ดังนั้น ... วิธีที่ดีที่สุดในการจัดการกับเรื่องนี้คืออะไร? ฉันจะปล่อยให้โจทำสิ่งที่ฉันต้องการด้วยสิทธิ์ของรูทอนุญาตให้เขาส่งผ่านตัวแปร (หรือทำอย่างนั้นได้อย่างมีประสิทธิภาพเหมือนกับตัวแปรสภาพแวดล้อม) ในขณะที่ไม่เปิดกว้างสำหรับการโจมตีแบบฉีด

1
วิธีการป้องกันฟังก์ชั่นทุบตีถูกแทนที่?
ในbashเปลือกเราสามารถกำหนดฟังก์ชั่นfด้วย f(){ echo Hello; } จากนั้นทำการประกาศใหม่ / แทนที่โดยไม่มีข้อผิดพลาดหรือข้อความเตือนใด ๆ ด้วย f(){ echo Bye; } ฉันเชื่อว่ามีวิธีในการปกป้องฟังก์ชั่นจากการถูกแทนที่ด้วยวิธีนี้

1
bash Extended glob - จับคู่ไฟล์โดยไม่มีคำนำหน้า
ฉันพยายามจับคู่ชื่อไฟล์สำหรับคุก fail2ban ดังนั้นฉันจึงต้องใช้ชื่อไฟล์กลม ๆ เท่านั้น - ไม่ใช่ regexes หรือ bash scripting /var/log/apache2ไดเรกทอรีของฉันมีไฟล์รวมถึง: example.com.error.log db.example.com.error.log app1.example.com.error.log app2.example.com.error.log ฉันพยายามที่จะสร้าง glob เพื่อให้ตรงกับไฟล์ทั้งหมดที่ลงท้ายด้วย.error.log ยกเว้น db.example.error.log - นี้เป็นไปได้หรือไม่ ฉันได้พยายามแต่ยังคงตรงกับ!(db)*.error.log db.example.com.error.logฉันคาดเดาว่าการ!()จับคู่ไม่มีตัวละครทำให้การ*จับคู่จากจุดเริ่มต้นของชื่อไฟล์ หมายเหตุ: ฉันไม่ต้องการขยาย glob เมื่อเพิ่มappXไฟล์บันทึกใหม่ดังนั้นฉันไม่สามารถใช้@()กับรายการชื่อไฟล์ที่ไม่ใช่ db ที่รู้จักในปัจจุบัน (พื้นหลัง: ฉันต้องการสร้างตัวกรองห้ามใครก็ตามที่ขอ phpMyAdmin URL ใด ๆ ในโดเมนใด ๆยกเว้น db.example.com)

3
Bash ถ้าคำสั่งไม่เสร็จในเวลา X
ฉันพยายามเรียกใช้บางอย่างเช่น: sudo dhclient $wifi || otherFunction ปัญหาคือเมื่อdhclientล้มเหลวมันแค่แฮงค์แทนที่จะทิ้งข้อผิดพลาด ฉันจะเขียนใหม่ข้างต้นเพื่อให้dhclientถูกฆ่าและotherFunctionได้รับการเรียกถ้าdhclientไม่เสร็จใน 60 วินาที?
13 bash  timeout 

3
[-t 1] ตรวจสอบอะไร
ฉันเพิ่งพบวิธีการเริ่มต้นzshเมื่อฉันเริ่มbashบน Windows จาก https://www.howtogeek.com/258518/how-to-use-zsh-or-another-shell-in-windows-10/ .bashrcมันแนะนำให้เพิ่มรหัสต่อไปนี้ที่สุดท้าย # Launch Zsh if [ -t 1 ]; then exec zsh fi อะไร[ -t 1 ]หมายถึง? มันเป็นความจริงเหรอ? จากนั้นฉันจะทำสิ่งนี้ได้ไหม? exec zsh
13 bash  shell  zsh  test 


2
ทำการดำเนินการเขียนอะตอมมิกในไฟล์ในทุบตี
หลังจากผ่านเอกสาร bash แล้วคำถามนี้และคำถามนี้ยังไม่ชัดเจนสำหรับฉันฉันจะดำเนินการเขียนอะตอม (ผนวก) ไปยังไฟล์ใน bash ได้อย่างไร ฉันมีสคริปต์ที่ทำงานในหลายกรณีและบางจุดต้องเขียนข้อมูลไปยังไฟล์: echo "$RESULT" >> `pwd`/$TEMP_DIR/$OUT_FILE เป็นไปได้อย่างไรที่จะทำการเขียนทั้งหมดจากสคริปต์ที่รันพร้อมกันไปยังไฟล์อะตอมมิก (ดังนั้นข้อมูลจากอินสแตนซ์หนึ่งจะไม่ซ้อนทับข้อมูลจากอีกอัน)

2
อักขระชื่อฟังก์ชันที่ถูกต้องของเชลล์
การใช้อักขระ Unicode แบบขยาย (ไม่มีข้อสงสัย) มีประโยชน์สำหรับผู้ใช้หลายคน เชลล์ที่ง่ายกว่า (ash (busybox), dash) และ ksh ล้มเหลวด้วย: tést() { echo 34; } tést แต่bash , mksh , lkshและzshดูเหมือนจะอนุญาต ฉันทราบว่าชื่อฟังก์ชันที่ถูกต้อง POSIX ใช้นิยามของชื่อนี้ นั่นหมายถึง regex นี้: [a-zA-Z_][a-zA-Z0-9_]* อย่างไรก็ตามในลิงค์แรกมันยังกล่าวว่า: การใช้งานอาจอนุญาตให้ตัวละครอื่น ๆ ในชื่อฟังก์ชั่นเป็นส่วนขยาย คำถามคือ: สิ่งนี้ได้รับการยอมรับและจัดทำเป็นเอกสารหรือไม่? ที่ไหน? เปลือกหอยไหน (ถ้ามี)? คำถามที่เกี่ยวข้อง: เป็นไปได้ใช้อักขระพิเศษในชื่อฟังก์ชันเปลือก? ฉันไม่สนใจที่จะใช้เมตาอักขระ (>) ในชื่อฟังก์ชัน ชื่อฟังก์ชันพุ่งพรวดและทุบตีที่มี“ -” ฉันไม่เชื่อว่าตัวดำเนินการ (การลบ "-") ควรเป็นส่วนหนึ่งของชื่อ
13 bash  shell  zsh  function 

2
มีวิธีรับ url จากแท็บปัจจุบันใน google-chrome หรือไม่?
ฉันเคยทำเช่นนั้นกับ firefox โดยใช้คำสั่ง python แต่เมื่อเร็ว ๆ นี้มีบางสิ่งเปลี่ยนแปลงและฉันไม่สามารถรับ URL ได้อีก สิ่งที่เคยทำงานกับ firefox: #!/bin/bash current_tab_num () { python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/xxxxx.default/sessionstore.js", "r")\njdata = json.loads(f.read())\nf.close()\nprint str(jdata["windows"][0]["selected"])' } current_tab_url () { sed -n "$(current_tab_num)p" <(python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/xxxxx.default/sessionstore.js", "r")\njdata = json.loads(f.read())\nf.close()\nfor win in jdata.get("windows"):\n\tfor tab in win.get("tabs"):\n\t\ti = tab.get("index") - …

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