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

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

5
มีวิธีอ่านองค์ประกอบสุดท้ายของอาร์เรย์ที่มี bash หรือไม่?
ถ้าฉันมีอาร์เรย์ที่มี 5 องค์ประกอบตัวอย่างเช่น: [a][b][c][d][e] ใช้echo ${myarray[4]}ฉันสามารถดูสิ่งที่มันถือ แต่ถ้าฉันไม่ทราบจำนวนองค์ประกอบในอาร์เรย์ที่กำหนดล่ะ มีวิธีอ่านองค์ประกอบสุดท้ายของอาร์เรย์ความยาวที่ไม่รู้จักหรือไม่? เช่นองค์ประกอบแรกอ่านจากขวาไปซ้ายสำหรับอาร์เรย์ใด ๆ ฉันต้องการทราบวิธีการทำเช่นนี้ในทุบตี
68 bash  array 

3
shellshock สามารถใช้ประโยชน์จาก SSH ได้อย่างไร
เห็นได้ชัดว่า shellshock Bash exploit CVE-2014-6271สามารถใช้ประโยชน์ผ่านเครือข่ายผ่าน SSH ฉันสามารถจินตนาการว่าการหาประโยชน์จะทำงานผ่าน Apache / CGI แต่ฉันไม่สามารถจินตนาการได้ว่าจะใช้ SSH อย่างไร ใครช่วยกรุณายกตัวอย่างว่า SSH จะถูกเอารัดเอาเปรียบได้อย่างไรและระบบจะทำอันตรายอะไรได้บ้าง? ชี้แจง AFAIU ผู้ใช้ที่ผ่านการตรวจสอบแล้วเท่านั้นที่สามารถใช้ประโยชน์จากช่องโหว่นี้ผ่าน SSH การใช้ประโยชน์นี้มีประโยชน์อะไรสำหรับใครบางคนที่สามารถเข้าถึงระบบที่ถูกกฎหมายได้? ฉันหมายความว่าการหาประโยชน์นี้ไม่มีการเพิ่มระดับสิทธิ์ (เขาไม่สามารถกลายเป็นรูตได้) ดังนั้นเขาจึงไม่สามารถทำอะไรได้มากกว่าที่เขาทำได้หลังจากเพียงเข้าสู่ระบบอย่างถูกต้องผ่าน SSH
68 bash  ssh  shellshock 

6
ทำไมการตั้งค่าตัวแปรก่อนที่คำสั่งถูกกฎหมายในทุบตี?
ฉันเพิ่งพบคำตอบหลายอย่างเช่นการแยกวิเคราะห์ไฟล์ข้อความที่คั่นด้วย ...ที่ใช้โครงสร้าง: while IFS=, read xx yy zz;do echo $xx $yy $zz done < input_file โดยที่IFSตัวแปรถูกตั้งค่าไว้ก่อนreadคำสั่ง ฉันอ่านการอ้างอิง bash แล้วแต่ไม่สามารถเข้าใจได้ว่าทำไมสิ่งนี้ถึงถูกกฎหมาย ฉันเหนื่อย $ x="once upon" y="a time" echo $x $y จากพรอมต์คำสั่ง bash แต่ไม่มีอะไรเกิดขึ้น ใครบางคนสามารถชี้ให้ฉันเห็นว่าไวยากรณ์นั้นถูกกำหนดในการอ้างอิงที่อนุญาตให้ตัวแปร IFS ตั้งค่าในลักษณะนั้นได้หรือไม่? มันเป็นกรณีพิเศษหรือฉันสามารถทำสิ่งที่คล้ายกับตัวแปรอื่น ๆ ได้หรือไม่?

3
อะไรคือความแตกต่างระหว่าง ~ / .profile, ~ / .bashrc, ~ / .bash_profile, ~ / .gnomerc, / etc / bash_bashrc, / etc / screenrc …?
คำตอบสำหรับคำถามเกี่ยวกับSOและaskubuntuพร้อมกับ poking through (และส่วนหัวอ่านของ) $HOMEและ/etc/ระบุจำนวนไฟล์ที่สามารถใช้เพื่อตั้งค่าตัวแปรสภาพแวดล้อมรวมถึง: ~/.profile ~/.bashrc ~/.bash_profile ~/.gnomerc ~/.Rprofile /etc/bash_bashrc /etc/profile /etc/screenrc ฉันรวบรวมไฟล์ที่ใช้/etc/งานได้สำหรับผู้ใช้ทุกคนในขณะที่ไฟล์$HOMEนั้นเป็นไฟล์เฉพาะของผู้ใช้ ฉันยังรวบรวมที่.profileโหลดเมื่อเข้าสู่ระบบในขณะที่.bashrcโหลดเมื่อ/bin/bashถูกดำเนินการ ฉันยังเข้าใจว่าโปรแกรมต่าง ๆ มีไฟล์การตั้งค่าที่แตกต่างกัน (เช่น.Rprofileสำหรับ R) แต่ฉันขอขอบคุณการชี้แจงบางอย่าง: มี*rcและ*profileไฟล์ที่แตกต่างกัน? ขอบเขตของไฟล์ดังกล่าวคืออะไร (เช่นไฟล์ใดที่มักใช้กับ Linux) มีลำดับชั้น (เช่น.bashrcเขียนทับชุดตัวแปร.settings) การอ้างอิงที่ดีสำหรับไฟล์ประเภทนี้คืออะไร? สำหรับตัวเลือกในไฟล์เหล่านี้? คำถามที่เชื่อมโยง "วิธีเข้าถึงตัวแปรสภาวะแวดล้อม bash จากภายใน R ใน emacs-ess" "ความแตกต่างระหว่างการเปิดใช้แอปพลิเคชันจากแป้นพิมพ์ลัดกับเทอร์มินัลหรือไม่"

9
ค้นหาคำสั่งก่อนหน้าด้วยคำนำหน้าฉันเพิ่งพิมพ์
เราสามารถใช้ลูกศรขึ้นและลงเพื่อเลื่อนดูประวัติคำสั่ง ใน IDEs บางตัวเช่น Matlab หากเราป้อนบางสิ่งแล้วกดปุ่มลูกศรเราจะเลื่อนเฉพาะคำสั่งประวัติที่เริ่มต้นด้วยสิ่งที่เรามีอินพุต สะดวกมาก แต่ในเชลล์เทอร์มินัลสิ่งนี้ไม่ทำงาน มีวิธีรับฟังก์ชั่นที่คล้ายกันในเชลล์เทอร์มินัลไหม? และเคล็ดลับอื่น ๆ สำหรับการปรับปรุงประสิทธิภาพในการใช้เทอร์มินัล?

8
keyserver หมดเวลาเมื่อพยายามเพิ่มรหัสสาธารณะ GPG
ฉันกำลังพยายามเพิ่มกุญแจสาธารณะสำหรับการติดตั้งโปรแกรมด้วย CPG แต่ฉันค่อนข้างใหม่สำหรับสิ่งนี้ แต่ทุกคำสั่งที่ฉันพบทำให้ฉันมีข้อผิดพลาดเดียวกัน: gpg --keyserver keyserver.ubuntu.com --recv-keys 94558F59 gpg: requesting key 94558F59 from hkp server keyserver.ubuntu.com gpg: keyserver timed out gpg: keyserver receive failed: keyserver error เป็นไปได้อย่างไรที่ฉันอยู่เบื้องหลังการปิดกั้นบางอย่างซึ่งทำให้ไม่สามารถสร้างการเชื่อมต่อกับเซิร์ฟเวอร์คีย์ได้ ฉันดูคำถาม OP หลายข้อและลองใช้คำสั่งทั้งหมดที่หาได้ แต่ไม่มีอะไรทำงาน ใครเคยมีปัญหานี้มาก่อนหรือไม่
67 bash  ubuntu  gpg 

4
ดูการขยายนามแฝงคำสั่ง
หากเรียกใช้watchคำสั่งที่มีนามแฝงคำสั่งนั้นจะไม่ขยายนามแฝง ฉันได้ลองทั้งด้วยการเสนอราคาเดี่ยวและการเสนอราคาซ้ำโดยแท้จริงแล้วได้รับชื่อแทนดังต่อไปนี้ # alias ll alias ll='ls -l --color=tty' คำสั่งต่อไปนี้จะล้มเหลว # watch ll sh: ll: command not found ไม่ควรใช้การขยายบรรทัดคำสั่งในกรณีนี้
67 bash  alias 

1
ฉันจะบังคับให้ yum ติดตั้งโดยไม่แจ้งผู้ใช้โดยใช้ bash ได้อย่างไร
ฉันกำลังเขียนสคริปต์ทุบตีเพื่อติดตั้ง php5.4 และฉันต้องการทำสิ่งนี้โดยอัตโนมัติสำหรับการทดสอบ VM คำสั่ง rpm ที่ฉันมีคือ: rpm -Uvh http://mirror.webtatic.com/yum/el5/latest.rpm yum install php54w ขณะนี้ในระหว่างการดำเนินการนี้จะมีพรอมต์ให้ผู้ใช้ป้อน [Y / N] ไม่ว่าจะดาวน์โหลดการอ้างอิงหรือไม่ ดังนั้นฉันต้อง: จำลองอินพุตผู้ใช้ของ [Y]; หรือ ส่งคำสั่งให้ yum ไม่ถามและถือว่า [Y] อะไรคือวิธีที่ดีที่สุดสำหรับสคริปต์ทุบตีและฉันจะบรรลุทั้งสองข้อได้อย่างไร
66 bash  yum  rpm 

4
ใน bash เป็นไปได้ไหมที่จะใช้ตัวแปรจำนวนเต็มในการควบคุมลูปของ for for loop
ฉันมีสคริปต์ทุบตีต่อไปนี้: #!/bin/bash upperlim=10 for i in {0..10} do echo $i done for i in {0..$upperlim} do echo $i done การforวนซ้ำครั้งแรก( โดยไม่มีตัวแปรupperlimในการควบคุมการวนซ้ำ) ทำงานได้ดี แต่การforวนซ้ำครั้งที่สอง( ด้วยตัวแปรupperlimในการควบคุมการวนซ้ำ) ไม่ทำงาน มีวิธีใดบ้างที่ฉันสามารถแก้ไขforลูปที่สองเพื่อให้ทำงานได้? ขอบคุณที่สละเวลา.
65 bash  shell  shell-script  for 

4
มีวิธีใดที่จะป้องกันไม่ให้มีการเพิ่มคำสั่งในประวัติของคุณหรือไม่?
มีวิธีใดที่จะป้องกันไม่ให้มีการเพิ่มคำสั่งในประวัติของคุณหรือไม่? ฉันมีคำสั่งที่ฉันต้องการให้ออกจากไฟล์ประวัติของฉันและฉันไม่สนใจที่จะมีมันเมื่อฉันค้นหาประวัติที่เก็บไว้ในหน่วยความจำแม้ว่ามันจะน้อยกว่าความกังวล มีวิธีการป้องกันหรือไม่ฉันต้องย้อนกลับและแก้ไขไฟล์ประวัติของฉัน ปรับปรุง:ฉันไม่ได้ตระหนักว่านี่อาจเป็นแบบเฉพาะเชลล์ zshเปลือกของฉันคือ คุณยินดีที่จะตอบสำหรับเชลล์อื่น ๆ เพื่อให้ผู้คนรู้วิธีทำสิ่งนี้ในเชลล์ของพวกเขา


7
วิธีอ่านบรรทัดแรกและบรรทัดสุดท้ายจากเอาต์พุต cat?
ฉันมีไฟล์ข้อความ งาน - รับบรรทัดแรกและบรรทัดสุดท้ายจากไฟล์หลังจาก $ cat file | grep -E "1|2|3|4" | commandtoprint $ cat file 1 2 3 4 5 ต้องการสิ่งนี้โดยไม่ต้องใช้เอาต์พุต cat (เพียง 1 และ 5) ~$ cat file | tee >(head -n 1) >(wc -l) 1 2 3 4 5 5 1 อาจจะมีวิธีแก้ปัญหาที่สั้นลงและสั้นลงกว่าเดิม ...
64 bash  shell  sed  awk  grep 

8
การแก้“ mv: รายการอาร์กิวเมนต์ยาวเกินไป” หรือไม่
ฉันมีโฟลเดอร์ที่มีไฟล์มากกว่าล้านไฟล์ที่ต้องการเรียงลำดับ แต่ฉันไม่สามารถทำอะไรได้เลยเพราะmvแสดงข้อความนี้ตลอดเวลา -bash: /bin/mv: Argument list too long ฉันใช้คำสั่งนี้เพื่อย้ายไฟล์ส่วนขยายที่น้อยกว่า: mv -- !(*.jpg|*.png|*.bmp) targetdir/
64 bash  shell  arguments  mv 

3
ฉันจะตรวจสอบว่าไฟล์เป็นลิงค์สัญลักษณ์ไปยังไดเรกทอรีได้อย่างไร?
ฉันสามารถตรวจสอบได้ว่ามีไฟล์อยู่หรือไม่และเป็นลิงก์สัญลักษณ์ที่มี -L for file in *; do if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi done และถ้ามันเป็นไดเรกทอรีที่มี -d: for file in *; do if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a …
64 bash  shell  test 

7
เชลล์สคริปต์ล้มเหลว: ข้อผิดพลาดทางไวยากรณ์:“ (” ไม่คาดคิด
ฉันทำงานกับสคริปต์ที่ตั้งค่าสภาพแวดล้อมการพัฒนาโดยอัตโนมัติสำหรับการพัฒนา Raspberry Pi (รายละเอียดทีละขั้นตอนที่ทำงานอยู่ที่นี่ ) สคริปต์ที่มีการเชื่อมโยงในบทความนั้น แต่ความสะดวกของคุณสามารถค้นหาได้ที่นี่ยัง ตอนนี้เมื่อรันสคริปต์นี้ติดตั้งและตั้งค่าสภาพแวดล้อมโดยไม่มีข้อผิดพลาด แต่คุณต้องป้อนรหัสผ่าน sudo ของคุณมากกว่าหนึ่งครั้งเนื่องจากค่าการหมดเวลาของ sudo โดยค่าเริ่มต้น ดังนั้นฉันเริ่มทดลองโดยลบบรรทัด sudo ทั้งหมดและรันสคริปต์ทั้งหมดผ่าน sudo ที่บรรทัดคำสั่งดังนี้: kemra102@ubuntuvm:~$ sudo ./pi_dev_env_install.sh วิธีนี้ใช้งานได้ตามที่คาดหวังและได้รับประโยชน์สูงสุดจนถึงจุดนี้: ./pi_dev_env_install: 68: ./pi_dev_env_install.sh: Syntax error: "(" unexpected ตอนนี้บรรทัดนี้ใช้งานได้ดีก่อนหน้านี้เมื่อไม่ได้เรียกใช้สคริปต์ทั้งหมดด้วย sudo ไม่มีอะไรเกี่ยวกับบรรทัดนี้ที่ทำงานเหมือน sudo ที่ควรหยุดทำงานกับความรู้ของฉันไม่มีใครมีความคิดบ้างไหม?

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