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

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

1
อย่างไร !! ทำงานในทุบตี?
มีประโยชน์มากเมื่อคุณลืม sudo ที่จุดเริ่มต้นของคำสั่งของคุณ!!ทำหน้าที่เหมือนนามแฝงของคำสั่งก่อนหน้า ตัวอย่าง: $ mv /very/long/path/for/a/protected/sensible/file/caution.h . (...) Permission denined $ sudo !! sudo mv /very/long/path/for(...) . [sudo] password : เราจะเรียก!!เคล็ดลับสองครั้งนั้นได้อย่างไร งานวิจัยทางอินเทอร์เน็ตนั้นยากเพราะโทเค็นนั้น มันทำงานยังไง? ฉันสงสัยลิงก์ด้วยคำสั่ง history มันถูกกำหนดไว้ที่ไหน? ฉันสามารถนิยามตัวเองได้ไหม แก้ไข: นักออกแบบเหตุการณ์ที่น่าสนใจ !!:* มันหมายถึงข้อโต้แย้งของคำสั่งก่อนหน้า ใช้กรณี: cat /a/file/to/read/with/long/path nano !!:* :p เพียงพิมพ์คำสั่งโดยไม่ต้องดำเนินการคุณจะต้องวางไว้ที่ส่วนท้ายของตัวกำหนดเหตุการณ์ $ !-5:p sudo rm /etc/fstab -f เพิ่มเติมที่นี่

10
ฉันจะสร้างไดเรกทอรีในไดเรกทอรีย่อยทั้งหมดได้อย่างไร
สมมติว่าฉันมีโครงสร้างไดเรกทอรีเช่นนี้ $ [~ / ฝึก] ls เอบีซีดี/ ตอนนี้ฉันต้องการสร้างไดเรกทอรีtmp1ในไดเรกทอรีย่อยทั้งหมดpracticeและฉันทำสิ่งนี้: $ [~ / ฝึก] mkdir * / tmp1 mkdir: ไม่สามารถสร้างไดเรกทอรี `* / tmp1 ': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว จากนั้นฉันลอง-pสวิตช์และจบด้วยไดเรกทอรีที่*มีไดเรกทอรีย่อยtmp1 $ [~ / ฝึก] mkdir -p * / tmp1 $ [~ / ฝึก] ls */ เอบีซีดี/ ฉันรู้ว่าการใช้-pสวิตช์คือการสร้างไดเรกทอรีที่ไม่มีอยู่หลายรายการ ฉันแค่คิดว่ามันอาจช่วย ฉันจะสร้างtmp1ในไดเรกทอรีย่อยทั้งหมดได้ในครั้งเดียวได้อย่างไร หากสามารถทำได้ฉันจะขยายไปยังการสร้าง\tmp1, \tmp2, \tmp3ใน\a, \bและ\cในครั้งเดียว? แก้ไข:ฉันพลาดการกล่าวขวัญว่าไดเรกทอรีที่ไม่จำเป็นต้องเป็นที่เรียบง่ายและในการสั่งซื้อเช่นa, b, cฯลฯ …

2
อัฒภาคในโครงสร้างที่มีเงื่อนไข
ทำไมใส่เครื่องหมายอัฒภาคไว้ในที่หนึ่งและไม่ใช่อีกอัน? ผลลัพธ์จะเหมือนกัน รหัสหนึ่ง if [ "a" == "a" ] then echo "true" fi รหัสสอง if [ "a" == "a" ]; then echo "true"; fi อัฒภาคในโค้ดที่สองนั้นไม่จำเป็นเลยเหรอ? เมื่อจำเป็นต้องใส่เครื่องหมายอัฒภาคหรือไม่
34 bash  scripting 

9
จะพิมพ์บรรทัดที่ยาวที่สุดในไฟล์ได้อย่างไร?
ฉันกำลังมองหาวิธีที่ง่ายที่สุดในการพิมพ์บรรทัดที่ยาวที่สุดในไฟล์ ฉันทำ googling แล้วก็แปลกใจที่ไม่สามารถหาคำตอบได้ ฉันมักจะพิมพ์ความยาวของบรรทัดที่ยาวที่สุดในไฟล์ แต่ฉันไม่ทราบวิธีพิมพ์บรรทัดที่ยาวที่สุดจริง ๆ ทุกคนสามารถให้บริการโซลูชั่นในการพิมพ์บรรทัดที่ยาวที่สุดในไฟล์ได้หรือไม่? ขอบคุณล่วงหน้า.
34 bash  awk  filter 


7
คำสั่ง Unix ใดที่สามารถใช้เป็นสัญญาณ / ล็อคได้
ฉันต้องการเรียกใช้สคริปต์เชลล์ Bash หลายชุดพร้อมกัน อย่างไรก็ตามฉันต้องการหลีกเลี่ยงสภาพการแข่งขัน คำสั่ง Unix ใดที่เป็นอะตอมมิกอย่างแท้จริงที่ฉันสามารถใช้เพื่อจุดประสงค์นี้และฉันจะใช้ได้อย่างไร

2
เครื่องหมายดอลลาร์ตามด้วยเครื่องหมายวงเล็บเหลี่ยม $ […] หมายถึงทุบตีอย่างไร
ปรากฏว่าการดำเนินการขยายตัวทางคณิตศาสตร์เช่นเดียวกับ$[expr] $((expr))แต่ฉันไม่พบการกล่าวถึง$[ในคู่มือทุบตี คำสั่งนี้ไม่ให้ผลลัพธ์: gunzip -c /usr/share/man/man1/bash.1.gz | grep -E '\$\[' ตัวดำเนินการนี้คืออะไรและมีพฤติกรรมที่เป็นมาตรฐานได้ทุกที่ รุ่น bash ของฉัน: GNU bash, รุ่น 3.2.51 (1) - ปล่อย (x86_64-apple-darwin13)
34 bash  arithmetic 

3
ท่อจาก grep ไปยัง awk ไม่ทำงาน
ฉันพยายามที่จะบันทึกไฟล์grepอย่างต่อเนื่องtailและได้nคำจากบรรทัด ไฟล์ตัวอย่าง: $ cat > test.txt <<EOL Beam goes blah John goes hey Beam goes what? John goes forget it Beam goes okay Beam goes bye EOL ^C ตอนนี้ถ้าฉันทำtail: $ tail -f test.txt Beam goes blah John goes hey Beam goes what? John goes forget it Beam goes okay Beam …
34 bash  grep  rhel  awk  tail 

3
อะไร: $ {param: = value} หมายถึงอะไร
ฉันอ่านต่อไปนี้ค่ะ คู่มือผู้ใช้ของ Z-Shell : คำพ้องความหมายสำหรับ 'ความจริง' คือ ':'; มันมักจะใช้ในรูปแบบนี้เพื่อให้ข้อโต้แย้งที่มีผลข้างเคียง แต่ไม่ควรใช้ - เช่น : ${param:=value} ซึ่งเป็นสำนวนสามัญในอนุพันธ์บอร์นเชลล์ทั้งหมด ในการขยายพารามิเตอร์$paramจะได้รับค่าค่าหากว่างก่อนและปล่อยให้อยู่คนเดียว เนื่องจากเป็นเหตุผลเดียวสำหรับการขยายพารามิเตอร์คุณจึงใช้:เพื่อละเว้นอาร์กิวเมนต์ ที่จริงแล้วเปลือกสร้าง blithely บรรทัดคำสั่ง - ลำไส้ใหญ่ตามด้วยสิ่งที่มีค่า$paramไม่ว่าจะได้รับมอบหมายหรือไม่ - จากนั้นดำเนินการคำสั่ง; มันแค่เกิดขึ้นที่ ':' จะไม่แจ้งให้ทราบถึงข้อโต้แย้งที่ได้รับ แต่ฉันไม่เข้าใจ ฉันได้รับ:หมายถึงtrueแต่มีสอง colons ในการแสดงออก ในฐานะที่เป็นคำถามเล็กน้อยทำไมสำนวนนี้จึงใช้มากในอนุพันธ์เชลล์บอร์นทั้งหมด มันมีจุดประสงค์อะไร หมายเหตุ: ฉันสนใจในสิ่งที่สำนวนนี้ทำในทั้งทุบตีและในzsh zsh ขอบคุณ
34 bash  shell  zsh 

9
เปิดไฟล์ที่กำหนดโดยผลลัพธ์ของคำสั่งเป็นกลุ่ม
ฉันพบว่าตัวเองทำสิ่งต่อไปนี้เกือบทุกวัน เรียกใช้การค้นหา ( find -name somefile.txt) เปิดผลลัพธ์ vim ปัญหาคือฉันต้องคัดลอกและวางผลลัพธ์ของการfindลงในvimคำสั่ง มีวิธีหลีกเลี่ยงการทำเช่นนี้หรือไม่? ฉันได้ทดลองเล็กน้อย ( find -name somefile.txt | vim) แต่ไม่พบสิ่งใดที่ใช้งานได้ ขอบคุณล่วงหน้า
34 linux  bash  vim  find 

5
เราจะรันคำสั่งที่เก็บไว้ในตัวแปรได้อย่างไร?
$ ls -l /tmp/test/my\ dir/ total 0 ฉันสงสัยว่าทำไมวิธีต่อไปนี้ในการเรียกใช้คำสั่งด้านบนจึงล้มเหลวหรือสำเร็จ $ abc='ls -l "/tmp/test/my dir"' $ $abc ls: cannot access '"/tmp/test/my': No such file or directory ls: cannot access 'dir"': No such file or directory $ "$abc" bash: ls -l "/tmp/test/my dir": No such file or directory $ bash -c $abc 'my …
34 bash  shell  quoting  variable 

6
วิ่งวนซ้ำอย่างแม่นยำหนึ่งครั้งต่อวินาที
ฉันใช้วงนี้เพื่อตรวจสอบและพิมพ์บางสิ่งทุกวินาที อย่างไรก็ตามเนื่องจากการคำนวณอาจใช้เวลาสักสองสามร้อยมิลลิวินาทีเวลาที่พิมพ์จึงข้ามหนึ่งวินาที มีวิธีใดที่จะเขียนลูปที่ฉันรับประกันว่าจะได้รับผลงานพิมพ์ทุกวินาทีหรือไม่? (แน่นอนว่าการคำนวณในลูปนั้นใช้เวลาน้อยกว่าหนึ่งวินาที :)) while true; do TIME=$(date +%H:%M:%S) # some calculations which take a few hundred milliseconds FOO=... BAR=... printf '%s %s %s\n' $TIME $FOO $BAR sleep 1 done
33 bash  timestamps  sleep 

1
เหตุใดเชลล์ในตัวของเชลล์จึงไม่สามารถทำงานด้วยตัวพิมพ์ใหญ่ แต่คำสั่งอื่นสามารถทำได้
ทำไมนี้ เมื่อฉันทำเช่นนี้ CD ~/Desktop ไม่ได้พาฉันไปที่เดสก์ท็อป แต่นี่: echo "foo bar" | GREP bar ให้ฉัน: bar

4
จะเปิดใช้งาน scl CentOS 6.4 อย่างถาวรได้อย่างไร
ฉันติดตั้ง devtoolset เวอร์ชั่นใหม่กว่า (1.1) และสงสัยว่าฉันจะตั้งค่าเหล่านี้เป็นค่าเริ่มต้นถาวรได้อย่างไร ตอนนี้เมื่อฉันเข้าสู่เซิร์ฟเวอร์ที่รัน CentOS ฉันต้องรันคำสั่งนี้scl enable devtoolset-1.1 bash ฉันพยายามเพิ่มลงใน ~ / .bashrc และวางลงบนบรรทัดสุดท้ายโดยไม่ประสบความสำเร็จ

6
'cat' เป็นเชลล์ในตัวหรือเป็นโปรแกรมภายนอกหรือไม่
เมื่อฉันใช้typeคำสั่งเพื่อตรวจสอบว่าcatเป็นเชลล์ในตัวหรือโปรแกรมภายนอกฉันได้รับผลลัพธ์ด้านล่าง: -$ type cat cat is hashed (/bin/cat) -$ นี่หมายความว่าcatเป็นโปรแกรมภายนอก/bin/catหรือไม่ ฉันสับสนเพราะเมื่อฉันตรวจสอบผลลัพธ์ด้านล่างechoเพื่อดูว่ามันเป็นbuilt-inโปรแกรม/bin/echo -$ type echo echo is a shell builtin -$ which echo /bin/echo -$ ดังนั้นฉันไม่สามารถใช้ตรรกะที่/bin/catจำเป็นต้องหมายถึงโปรแกรมภายนอกเพราะเสียงก้องเป็น/bin/echoแต่ยังคงเป็นในตัว แล้วฉันจะรู้ได้อย่างไรว่าcatมันคืออะไร? ในตัวหรือภายนอก?
33 bash  cat  echo  shell-builtin 

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