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

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

5
มี xargs ใช้นามแฝงแทนไบนารี
Bash 4.2 บน CentOS 6.5: ในตัวฉัน~/.bash_profileฉันมีนามแฝงมากมายรวมไปถึง: alias grep='grep -n --color=always' grepเพื่อที่ฉันจะได้รับการเน้นสีและพิมพ์หมายเลขบรรทัดโดยอัตโนมัติเมื่อใช้งาน หากฉันเรียกใช้สิ่งต่อไปนี้การเน้นงานเป็นไปตามที่คาดไว้ $ grep -Re 'regex_here' *.py อย่างไรก็ตามเมื่อฉันวิ่งเร็ว ๆ นี้: $ find . -name '*.py' | xargs grep -E 'regex_here' ผลที่ไม่ได้เน้นและหมายเลขบรรทัดไม่ถูกพิมพ์, บังคับให้ฉันกลับไปและเพิ่มอย่างชัดเจน-n --color=alwaysกับgrepคำสั่ง ไม่xargsอ่านนามแฝงในสภาพแวดล้อมหรือไม่? ถ้าไม่มีมีวิธีที่จะทำเช่นนั้นหรือไม่?
14 bash  alias  xargs 

3
วิธีรวมกระบวนการทดแทนของ Bash เข้ากับเอกสาร HERE ได้อย่างไร
ใน Bash รุ่น 4.2.47 (1) - ปล่อยเมื่อฉันพยายามที่จะจัดรูปแบบข้อความที่จัดมาจาก HERE-dcoument ดังนี้: cat <(fmt --width=10 <<FOOBAR (I want the surrounding parentheses to be part of the HERE-document) (Even the preceding unbalanced parenthesis should be part of it. FOOBAR ) # I want this paranthesis to end the process substitution. ฉันได้รับข้อผิดพลาดต่อไปนี้: bash: bad substitution: …

1
exec 3 <& 1 ทำอะไร
ฉันเข้าใจว่าexecสามารถเปลี่ยนเส้นทาง I / O บนเชลล์ปัจจุบันได้ แต่ฉันเห็นการใช้งานเช่น: exec 6&lt;&amp;0 # Link file descriptor #6 with stdin. # Saves stdin. exec 6&gt;&amp;1 # Link file descriptor #6 with stdout. # Saves stdout. จากที่ฉันเข้าใจว่า&lt;มีไว้สำหรับอินพุตสตรีม&gt;สำหรับสตรีมเอาต์พุต แล้วจะexec 3&lt;&amp;1ทำอย่างไรดี? PS: ฉันพบสิ่งนี้จากซอร์สโค้ดของ Bats

4
จะเรียกใช้เชลล์ในตัวได้อย่างไร
ฉันต้องการปรับแต่งการทำงานของcdคำสั่งตามความต้องการของฉัน ฉันกำหนดหน้าที่ดังต่อไปนี้ - function cd () { cd "$@" &amp;&amp; pushd "$@"; } ความตั้งใจของฟังก์ชั่นนี้คือการผลักดันไดเรกทอรีไปยังสแต็กโดยอัตโนมัติเพื่อให้ฉันไม่ต้องพยายามพิมพ์ด้วยตนเองpushd .ทุกครั้ง แต่ฟังก์ชั่นดังกล่าวข้างต้นเป็นฟังก์ชันเวียนเพียบเช่นการเรียกร้องให้cdมีการตีความว่าจะเป็นฟังก์ชั่นของตัวเองและไม่ได้cdในตัว ฉันจะอ้างอิงในcdตัวในฟังก์ชั่นนี้ได้อย่างไร \ฉันรู้ว่านามแฝงสามารถหนีออกมาใช้ เป็นวิธีการหลบหนีฟังก์ชั่นหรือการอ้างอิงในตัวในทางที่ชัดเจนมากขึ้นคืออะไร? หมายเหตุ: ฉันไม่ต้องการเปลี่ยนชื่อฟังก์ชั่นของฉันเป็นอย่างอื่น

2
การเรียกใช้หลายพันกระบวนการพื้นหลังขดในแบบคู่ขนานในสคริปต์ทุบตี
ฉันกำลังใช้งาน thounsand ของกระบวนการ background curlขนานในสคริปต์ทุบตีต่อไป START=$(date +%s) for i in {1..100000} do curl -s "http://some_url_here/"$i &gt; $i.txt&amp; END=$(date +%s) DIFF=$(( $END - $START )) echo "It took $DIFF seconds" done ฉันมีเซิร์ฟเวอร์เฉพาะ 49Gb Corei7-920 (ไม่ใช่เสมือน) ฉันติดตามการใช้หน่วยความจำและ CPU ผ่านtopคำสั่งและพวกเขาอยู่ไกลจากขอบเขต ฉันกำลังใช้ps aux | grep curl | wc -lเพื่อนับจำนวนกระบวนการcurlปัจจุบัน ตัวเลขนี้เพิ่มขึ้นอย่างรวดเร็วมากถึง 2-4 พันจากนั้นเริ่มลดลงอย่างต่อเนื่อง หากฉันเพิ่มการแยกวิเคราะห์อย่างง่าย ๆ …
14 linux  performance  bash  curl  wget 

4
grep สำหรับสตริงตัวอักษรผสมตัวเลขที่มีความยาวใด ๆ กับโคลอนในแต่ละด้าน
วิธีที่คุณจะ grep สำหรับสตริงและตัวเลข 1 ถึง 50 ตัวอักษร (นึกคิด, ความยาวใด ๆ ที่จะทำงานมากเกินไป) กับลำไส้ใหญ่ในแต่ละด้าน - :shopping:ผลโดยทั่วไปจะเป็นทุกสายที่มีสตริง จนถึงตอนนี้ฉันได้รับรหัสด้านล่าง (ฉันลองใช้รูปแบบที่หลากหลาย) ซึ่งใช้งานไม่ได้: grep ':[[:alnum:]]{1,100}:' ~/x.txt

2
Setuid bit ดูเหมือนว่าจะไม่มีผลกับการทุบตี
ฉันกำลังทดลองอยู่เล็กน้อยและสังเกตเห็นบางสิ่งที่แปลก: ตั้งค่าบิต setuid บนสำเนาทุบตีที่ตั้งอยู่ที่/usr/bin/bash-testดูเหมือนจะไม่มีผล เมื่อฉันใช้งานอินสแตนซ์ของbash-testไดเรกทอรีบ้านของฉันไม่ได้ถูกตั้งค่าเป็น/rootและเมื่อฉันรันwhoamiคำสั่งจากbash-testชื่อผู้ใช้ของฉันไม่ได้รายงานว่าเป็นการrootแนะนำว่าbash-testไม่ทำงานเป็นราก อย่างไรก็ตามหากฉันตั้งค่า setuid bit whoamiฉันจะรายงานว่าเป็นรูทในเชลล์ใด ๆ ตามที่คาดไว้ ฉันลองตั้งค่า setuid bit /usr/bin/bashเช่นกันและสังเกตพฤติกรรมเดียวกัน ทำไมทุบตีไม่ทำงานเหมือนรูทเมื่อฉันตั้งค่า setuid bit บนมัน? เซลิลักซ์มีส่วนเกี่ยวข้องกับเรื่องนี้หรือไม่?
14 linux  bash  setuid 

3
แสดงร่างกายฟังก์ชั่นใน Bash
ฉันมีการตั้งค่าฟังก์ชั่นหลายอย่างใน.bashrcไฟล์ของฉัน ฉันต้องการแสดงโค้ดจริงของฟังก์ชันและไม่เรียกใช้งานเพื่ออ้างถึงบางสิ่งบางอย่างได้อย่างรวดเร็ว มีวิธีใดบ้างที่เราจะเห็นนิยามฟังก์ชั่น?
14 bash  function 

4
อะไรคือวิธีที่แตกต่างกันที่ข้อความสามารถแสดงไปยัง bash shell หลังจากที่ผู้ใช้ล็อกอิน?
ฉันมี CentOS 5.7 VPS โดยใช้ bash เป็นเชลล์ที่แสดงคำทักทายที่มีตราสินค้าทันทีหลังจากลงชื่อเข้าใช้ผ่าน SSH ฉันพยายามแก้ไข แต่ดูเหมือนไม่สามารถหาได้ว่ามันอยู่ที่ไหนในสถานที่ปกติ จนถึงตอนนี้ฉันได้ดูในmotdไฟล์และตรวจสอบsshd_configการตั้งค่าไฟล์แบนเนอร์ ไม่ได้ตั้งไฟล์แบนเนอร์ ฉันสามารถหาข้อความล็อกอินได้ที่ไหน
14 linux  bash  ssh  centos  login 

4
แตะทุกโฟลเดอร์ในไดเรกทอรี
ฉันพยายามอัปเดตการประทับเวลาของโฟลเดอร์ทั้งหมดใน cwd โดยใช้สิ่งนี้: for file in `ls`; do touch $file; done แต่ดูเหมือนจะไม่ทำงาน ความคิดใด ๆ
14 bash  touch 

12
เครื่องมือ diff linux: สร้างรายการไฟล์ที่แก้ไข
ฉันจะสร้างรายการไฟล์ที่ถูกแก้ไขโดยใช้เครื่องมือโดยใช้เครื่องมือบรรทัดคำสั่ง linux ได้อย่างไร ฉันไม่สนใจความแตกต่างของไฟล์ใด ๆ (เดลต้าแพทช์) ฉันแค่ต้องการมีรายการไฟล์ใหม่หรือไฟล์ที่ปรับเปลี่ยนแล้วเมื่อเทียบกับรุ่นก่อนหน้า เพื่อให้ฉันสามารถเผยแพร่อัปเดตผลิตภัณฑ์ใหม่ อัปเดต: diff -qrไม่สร้างผลลัพธ์ที่น่าเชื่อถือมาก ผลลัพธ์ของdiff -qrยังจะต้องมีการประมวลผล มีวิธีที่ดีกว่านี้ไหม?

3
ทำไมเครื่องหมายอัศเจรีย์ "!" บางครั้งทำให้ไม่พอใจทุบตี?
ฉันรู้ว่า!มีความสำคัญเป็นพิเศษใน commandline ในบริบทของประวัติศาสตร์ commandline แต่นอกเหนือจากนั้นในสคริปต์การเรียกใช้เครื่องหมายอัศเจรีย์ในบางครั้งอาจทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์ ฉันคิดว่ามันมีบางอย่างเกี่ยวข้องกับการeventแต่ฉันไม่ทราบว่าเหตุการณ์คืออะไรหรือทำอะไร ถึงกระนั้นคำสั่งเดียวกันก็สามารถทำงานต่างกันในสถานการณ์ที่ต่างกัน ตัวอย่างสุดท้ายด้านล่างทำให้เกิดข้อผิดพลาด แต่ทำไมเมื่อรหัสเดียวกันทำงานนอกการทดแทนคำสั่ง? .. ใช้ GNU bash 4.1.5 # This works, with or without a space between ! and p { echo -e "foo\nbar" | sed -nre '/foo/! p' echo -e "foo\nbar" | sed -nre '/foo/!p'; } # bar # bar # This works, …

2
bash ไวยากรณ์ของเคสที่ซ้อนกันและ ;; จุดสิ้นสุด
ฉันมีเทอร์มิเนเตอร์เพียงพอ (หรืออาจจะมากเกินไป) ;;ในสคริปต์ทุบตีนี้ที่มีซ้อนอยู่caseหรือไม่? case "$1" in OK) # Nothing needs done echo -n "OK:1" ;; CRITICAL) case "$2" in SOFT) case "$3" in 1|2) soft_reset_pool.sh ;; esac ;; HARD) case "$3" in 1|2) hard_reset_pool.sh ;; 3|4) hard_reset_service ;; esac ;; esac ;; esac ไม่กี่ปีมานี้ที่ฉันโกรธมาก ๆ
14 bash 

1
อะไรคือความแตกต่างระหว่าง. bashrc และ. inputput
ฉันใหม่เพื่อระบบยูนิกซ์และพบว่ามันน่าสนใจที่จะสร้างฟังก์ชั่นที่กำหนดเองและการกำหนดค่าในแฟ้มการตั้งค่าเหมือนและ.bashrc.inputrc อย่างไรก็ตามฉันไม่เข้าใจความแตกต่างระหว่างทั้งสอง .bashrcตัวอย่างเช่นเมื่อฉันสร้างนามแฝงผมใส่ไว้ใน Example 1: alias ...='cd ../../' .inputrcเมื่อฉันสร้างการดำเนินงานเช่นการใช้ปุ่มลูกศรที่จะมองหาคำสั่งก่อนหน้าหรือถัดไปผมใส่คำสั่งใน Example 2: "\e[A": history-search-backward ทำไมฉันต้องใส่มันในไฟล์การตั้งค่าที่ต่างกัน วิธีผมไม่เห็นความแตกต่างเมื่อจะนำสิ่งที่? ขอบคุณล่วงหน้า!

5
ตัวแปรทั้งหมดถูกจัดเก็บในหน่วยความจำเป็นสตริงในทุบตีหรือไม่?
ว่าฉันสร้างตัวแปรต่อไปนี้: s=John i=12345 f=3.14 ตัวแปรเหล่านี้ทั้งหมดถูกจัดเก็บในหน่วยความจำเป็นสตริงหรือbashมีชนิดข้อมูลอื่นหรือไม่?
14 bash 

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