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

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

5
ฉันจะมีความเป็นไปได้มากกว่าหนึ่งรายการในกลุ่ม Shebang ของสคริปต์ได้อย่างไร
ฉันอยู่ในสถานการณ์ที่น่าสนใจเล็กน้อยซึ่งฉันมีสคริปต์ Python ที่สามารถเรียกใช้โดยผู้ใช้หลายคนที่มีสภาพแวดล้อมหลากหลาย (และ PATH) และในระบบ Linux ที่หลากหลาย ฉันต้องการให้สคริปต์นี้สามารถใช้งานได้กับสิ่งเหล่านี้ให้มากที่สุดโดยไม่มีข้อ จำกัด นี่คือการตั้งค่าที่รู้จักบางส่วน: Python 2.6 เป็นรุ่น Python ของระบบดังนั้น python, python2 และ python2.6 มีอยู่ใน / usr / bin (และเทียบเท่า) Python 2.6 เป็นรุ่น Python ของระบบดังกล่าวข้างต้น แต่ Python 2.7 ได้รับการติดตั้งไว้ข้างๆเป็น python2.7 Python 2.4 เป็นรุ่น Python ของระบบซึ่งสคริปต์ของฉันไม่รองรับ ใน / usr / bin เรามี python, python2 และ …
16 bash  scripting  python 

3
จะทดสอบว่าตัวแปรถูกกำหนดใน Bash ก่อนเวอร์ชั่น 4.2 ด้วยตัวเลือกเชลล์ของคำนามได้อย่างไร?
สำหรับเวอร์ชัน Bash ก่อนหน้า "GNU bash เวอร์ชัน 4.2" มีทางเลือกอื่นใดเทียบเท่าสำหรับ-vตัวเลือกของtestคำสั่งหรือไม่ ตัวอย่างเช่น: shopt -os nounset test -v foobar && echo foo || echo bar # Output: bar foobar= test -v foobar && echo foo || echo bar # Output: foo
16 bash  test 


3
เมตาคีย์ของ bash คืออะไร?
ฉันพยายามใช้xmodmapแมปMETA_LไปยังMENUคีย์ แต่ดูเหมือนว่าจะไม่ได้รับการยอมรับจากbashเมตาคีย์ ดังนั้นฉันสงสัยว่าองค์ประกอบเหล่านี้ (คีย์บอร์ด, X, xterm, bash) เกี่ยวข้องกันอย่างไรในส่วนของ Meta- และ Super-Keys คำอธิบายใด ๆ ที่จะได้รับการชื่นชม ขอผมใช้อีกวิธีนี้ หน้าคนทุบตีกล่าวว่าเช่นว่าฟังก์ชั่นงัด-ที่ n-หาเรื่องถูกผูกไว้และจะทำงานเมื่อฉันกดM-C-y Esc-Control-yแต่ฉันคิดว่ามันค่อนข้างยุ่งยาก ดังนั้นฉันจะทำให้ bash ยอมรับคีย์อื่นเป็นMeta(เช่นMenu) สำหรับการผูกค่าเริ่มต้นทั้งหมดได้อย่างไร

4
เติมชื่อไฟล์อัตโนมัติในไดเรกทอรี
คำถามนี้ค่อนข้างคล้ายกับคำถามนี้แต่ฉันไม่เข้าใจวิธีแก้ปัญหา ฉันรู้ด้วยบทช่วยสอนนี้แต่ฉันก็ยังไม่สามารถเข้าใจสิ่งที่ฉันทำผิดได้ ฉันกำลังพยายามเติมข้อความอัตโนมัติในรายการไดเรกทอรีที่อยู่ใน/something/: $ ls /something/ One Other Three ในแบบที่จะเกิดขึ้น: $ hi [TAB] One Other Three $ hi O[TAB] One Other เฉพาะเมื่อคำแรกเป็นhiและไม่เพียง /something/แต่ภายใน นี่คือสิ่งที่ฉันกำลังทำอยู่.profile: _codeComplete() { local cur=${COMP_WORDS[COMP_CWORD]} COMPREPLY=( $(compgen `ls /something/` -- $cur) ) } complete -F _codeComplete "hi "

4
กำลังประมวลผลตัวแปร bash ด้วย sed
ตัวแปร bash LATLNG มีค่าละติจูดและลองจิจูดในวงเล็บเหลี่ยมเช่นนั้น (53.3096,-6.28396) ฉันต้องการแยกคำเหล่านี้เป็นตัวแปรที่เรียกว่า LAT และ LON ซึ่งฉันกำลังพยายามทำผ่านทาง sed เช่นนั้น LAT=$(sed "s/(\(.*\),\(.*\))/\1/g" "$LATLNG") LON=$(sed "s/(\(.*\),\(.*\))/\2/g" "$LATLNG") อย่างไรก็ตามฉันได้รับข้อผิดพลาดต่อไปนี้: sed: can't read (53.3096,-6.28396): No such file or directory

4
วนรอบตัวแปร
ฉันกำลังเขียนสคริปต์ทุบตีเพื่อใช้ rsync และอัปเดตไฟล์บนเซิร์ฟเวอร์ที่แตกต่างกันประมาณ 20 แห่ง ฉันมีส่วน rsync ที่คิดออก สิ่งที่ฉันมีปัญหาคือต้องผ่านรายการตัวแปร สคริปต์ของฉันมีลักษณะเช่นนี้: #!/bin/bash SERVER1="192.xxx.xxx.2" SERVER2="192.xxx.xxx.3" SERVER3="192.xxx.xxx.4" SERVER4="192.xxx.xxx.5" SERVER5="192.xxx.xxx.6" SERVER6="192.xxx.xxx.7" for ((i=1; i<7; i++)) do echo [Server IP Address] done [Server IP Address]ค่าของตัวแปรที่เกี่ยวข้องควรอยู่ที่ไหน ดังนั้นเมื่อ i = 1 ฉันควร echo ค่าของ $ SERVER1 ฉันลองทำซ้ำหลายครั้งรวมถึง echo "$SERVER$i" # printed the value of i echo "SERVER$i" …


1
วิธีการใช้ฟังก์ชั่นที่กำหนดไว้ด้วย xargs
นี่คือรหัสของฉัน #!/bin/bash showword() { echo $1 } echo This is a sample message | xargs -d' ' -t -n1 -P2 showword ดังนั้นฉันจึงมีฟังก์ชั่นshowwordที่สะท้อนสิ่งที่คุณส่งผ่านสายเป็นพารามิเตอร์ไปยังฟังก์ชั่น จากนั้นฉันได้xargsลองเรียกใช้ฟังก์ชั่นแล้วส่งต่อทีละหนึ่งคำไปยังฟังก์ชั่นแล้วเรียกใช้ฟังก์ชัน 2 ชุดพร้อมกัน สิ่งที่ไม่ทำงานคือxargsไม่รู้จักฟังก์ชั่น ฉันจะบรรลุสิ่งที่ฉันพยายามทำได้อย่างไรฉันจะทำให้ xargs ทำงานกับฟังก์ชันได้showwordอย่างไร
16 bash  xargs  function 

3
การเรียกใช้งาน executable ใน PATH ด้วยชื่อเดียวกันกับฟังก์ชั่นที่มีอยู่
บางครั้งฉันกำหนดฟังก์ชั่นที่ให้เงาของไฟล์ที่ปฏิบัติการได้และปรับแต่งอาร์กิวเมนต์หรือเอาต์พุตของมัน ดังนั้นฟังก์ชั่นจึงมีชื่อเดียวกับไฟล์ที่เรียกใช้งานได้และฉันต้องการวิธีเรียกใช้ไฟล์ที่เรียกใช้จากฟังก์ชันโดยไม่ต้องเรียกใช้ฟังก์ชันซ้ำ ตัวอย่างเช่นเมื่อต้องการเรียกใช้ผลลัพธ์ของการfossil diffผ่านcolordiffและless -Rฉันใช้: function fossil () { local EX=$(which fossil) if [ -z "$EX" ] ; then echo "Unable to find 'fossil' executable." >&2 return 1 fi if [ -t 1 ] && [ "$1" == "diff" ] ; then "$EX" "$@" | colordiff | less -R return …
16 bash  path  function 

9
แสดงหมายเลขของสัปดาห์ในบางรูปแบบโดยใช้ ncal หรือ cal
คุณไม่เพียงแค่รักมันเมื่อทั้งสองคำสั่งทำในสิ่งที่คุณต้องการ แต่ไม่ทำทั้งสองอย่าง? นี่คือสิ่งที่calไม่ การจัดรูปแบบที่ดี ไม่มีตัวเลขสัปดาห์แม้ว่า: $ cal January 2012 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 นี่คือสิ่งที่ncalไม่ การจัดรูปแบบแปลก ๆ …

5
ทุบตีซีดีจนในบางโฟลเดอร์
ฉันทำงานมากมายใน Magento และทำคนมากมายที่ฉันทำงานด้วยและมันก็น่ารำคาญที่ต้องพิมพ์: cd ../../../../../../ หากต้องการพบว่าคุณยังคงมีไดเรกทอรีไม่กี่ไดเรกทอรีจากโฟลเดอร์ 'httpdocs' ของคุณดังนั้นฉันจึงพยายามสร้างสคริปต์ที่ตามด้วยรหัสหลอกนี้: while lowest level directory != httpdocs cd ../ end while; ดูเหมือนง่ายมากฉันสมมติว่าฉันต้องทำ grep บางรูปแบบในการตรวจสอบว่าส่วนสุดท้ายของไดเรกทอรีการทำงานปัจจุบันคือ httpdocs หรือไม่ถ้าไม่ใช่แค่เพิ่มระดับไปเรื่อย ๆ จนกว่ามันจะเป็นจริง ฉันได้รับการดูการเรียนรู้ทุบตีนี้แม้ว่าดูเหมือนว่าจะต้องมีบางสิ่งบางอย่างออกมีแล้วที่คล้ายกันและไวยากรณ์ที่ไขปริศนาฉันไม่สิ้นสุด

2
วิธีตรวจสอบเป้าหมายของลิงก์สัญลักษณ์ที่มีสัญลักษณ์ไปยังเส้นทางที่ต้องการ
ภายในสคริปต์ทุบตีฉันรู้ว่าฉันสามารถตรวจสอบว่าไฟล์เป็นลิงค์สัญลักษณ์ที่มีไวยากรณ์ต่อไปนี้หรือไม่ if [ -L $path ] ไม่มีใครรู้ว่าฉันจะทดสอบว่าเส้นทางนั้นเชื่อมโยงกับเส้นทางเฉพาะหรือไม่ เช่นผมต้องการที่จะตรวจสอบว่าเป้าหมายของการเป็น$path/some/where
16 bash  shell  symlink 

1
คุณลักษณะทุบตีอยู่ที่ไหนเพื่อเปิดคำสั่งในเอกสาร $ EDITOR
ฉันได้ค้นพบเมื่อเร็ว ๆ นี้ว่าถ้าเรากดCtrl+ X Ctrl+ E, bash จะเปิดคำสั่งปัจจุบันในตัวแก้ไข (ตั้งค่า$VISUALหรือ$EDITOR) และดำเนินการเมื่อตัวแก้ไขถูกปิด แต่ดูเหมือนว่าจะไม่มีการบันทึกไว้ในmanหน้าเว็บ
16 bash  line-editor 

3
อะไรคือความแตกต่างที่แน่นอนระหว่าง“ subshell” และ“ กระบวนการลูก”
ตามนี้และนี้เป็น subshell (…)จะเริ่มต้นโดยใช้วงเล็บ ( echo "Hello" ) ตามนี้ , นี้และนี้เป็นกระบวนการที่คดเคี้ยวเมื่อคำสั่งจะถูกเริ่มต้นด้วย& echo "Hello" & ข้อกำหนด Posix ใช้คำsubshellในหน้านี้แต่ไม่ได้กำหนดและยังอยู่ในหน้าเดียวกันที่ไม่ได้กำหนด "กระบวนการเด็ก" ทั้งสองกำลังใช้fork()ฟังก์ชันเคอร์เนลใช่ไหม อะไรคือความแตกต่างที่แน่นอนในการเรียกส้อม "sub-shell" และส้อมอื่น ๆ เรียกว่า "child process"
16 bash  shell  subshell 

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