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

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

2
ฉันจะสร้างสภาวะแวดล้อม clean shell สำหรับการใช้งานชั่วคราวได้อย่างไร?
ฉันเป็นผู้ตอบคำถามบ่อยในเว็บไซต์ถาม - ตอบยอดนิยมของ Unix และในหลาย ๆ คำตอบของฉันฉันให้ตัวอย่างโดยใช้bashเชลล์ อย่างไรก็ตามในแต่ละครั้งที่ฉันทำสิ่งนี้ฉันจะต้องทำกระบวนการสร้างสภาพแวดล้อมที่สะอาดด้วยตนเองเพื่อให้แน่ใจว่าทุกขั้นตอนมีการบันทึกและจัดทำเอกสาร ฉันจะทำให้กระบวนการนี้ตรงไปตรงมามากขึ้นได้อย่างไร ฉันกำลังมองหาการพิมพ์คำสั่งเดียวและรับสภาพแวดล้อมที่สะอาดและลบร่องรอยทั้งหมดของสภาพแวดล้อมชั่วคราวหลังจากที่ฉันทำเสร็จแล้ว

2
ฉันสามารถทำให้อินเทอร์แอคทีฟได้เฉพาะเมื่อใช้ globbing หรือไม่ (ใน bash หรือ zsh หรือทั้งสองอย่าง)
เมื่อใดก็ตามที่ฉันมีrmหลายรายการพร้อม ๆ กันกับที่มีเปลือกหอยกลมและมีความเป็นไปได้แม้แต่น้อยที่สุดที่รูปแบบขยายออกไปมากกว่าที่ฉันคาดไว้ฉันพยายามจำไว้เสมอว่าจะเพิ่ม-iแต่แน่นอนฉันสามารถลืมและระเบิดสิ่งที่มีประโยชน์ บางคนพยายามที่จะแก้ปัญหานี้ด้วยนามแฝงเช่นalias rm='rm -i'แต่ฉันเกลียดความคิดในการสร้าง rm แบบอินเทอร์แอคทีฟเสมอเพราะจากนั้นฉันจะใช้นิสัย-fตลอดเวลาซึ่งจะเอาชนะวัตถุประสงค์ทั้งหมดอย่างเห็นได้ชัด สิ่งที่ผมอยากจะทำคือให้rmใช้เฉพาะ-iเมื่อฉันใช้ globbing และ-fแน่นอนที่จะแทนที่ดังนั้นฉันยังคงสามารถระเบิดไดเรกทอรีออกไปทั้งที่มีตามปกติ-irm -rf junk ดังนั้นrm *blah*จริงๆจะเป็นrm -i *blah*แต่rm blahจะทำงานตรงตามที่พิมพ์ ในกรณีที่มีความแตกต่างในวิธีการที่จะประสบความสำเร็จในเปลือกหอยที่แตกต่างกันฉันจะเลือกคำตอบที่ให้วิธีการสำหรับทั้ง bash และ zsh มากกว่าคำตอบที่ครอบคลุมอย่างใดอย่างหนึ่งเท่านั้น หมายเหตุ : ฉันไม่เชื่อจริง ๆ ว่านี่เป็นความคิดที่ดี ฉันแค่ถามว่ามันเป็นไปได้ หากคุณคิดว่านี่เป็นความคิดที่โง่ฉันจะมีความสุขมากที่จะได้ยินเหตุผลที่อยู่เบื้องหลังความคิดเห็นของคุณ แต่โปรดอย่าแสดงความคิดเห็นไม่ได้โพสต์ดังกล่าวในฟิลด์คำตอบ คำตอบจริง ๆ บอกฉันว่าจะทำอย่างไรหรืออธิบายว่า / ทำไมจึงเป็นไปไม่ได้ (หรืออาจเสนอวิธีอื่นในการรับผลลัพธ์ที่คล้ายกัน) แต่ถ้าคุณต้องการที่จะบอกฉันว่าทำไมนี้เป็นใบ้กรุณาโพสต์เป็นความคิดเห็น ฉันจะลบล้างความคิดเห็นที่มีเหตุผลแม้ว่าฉันจะไม่เห็นด้วยกับข้อสรุปก็ตาม
15 bash  zsh  wildcards  rm 

1
เหตุใดการขยายตัวแปรโดยไม่มี $ ทำงานในนิพจน์
#!/bin/bash VALUE=10 if [[ VALUE -eq 10 ]] then echo "Yes" fi ด้วยความประหลาดใจของฉันผลลัพธ์นี้ "ใช่" [[ $VALUE -eq 10 ]]ผมจะได้คิดว่ามันจะต้องมี ฉันสแกนCONDITIONAL EXPRESSIONSส่วนของman bashแล้ว แต่ไม่พบสิ่งใดที่จะอธิบายพฤติกรรมนี้


4
ลิงก์สัญลักษณ์ไปยังไดเร็กทอรีและพา ธ สัมพัทธ์
ฉันได้สร้าง symlink ด้วยเส้นทางที่แน่นอนไปยังไดเรกทอรี (กะพริบ) และมีตัวอย่างดังต่อไปนี้ต้นไม้: $ ls -l /tmp/A total 0 lrwxrwxrwx 1 root root 6 Apr 3 12:27 Blink -> /tmp/B -rw-r--r-- 1 root root 0 Apr 3 12:27 foo $ ls -l /tmp/B total 0 -rw-r--r-- 1 root root 0 Apr 3 12:27 bar จากนั้นฉันไปที่ / tmp / …

2
อะไรคือความแตกต่างระหว่าง: และจริง
ในbash: $ type : : is a shell builtin $ type true true is a shell builtin ดูเหมือนว่าพวกเขาจะเหมือนกัน แต่พวกเขาไม่ได้ให้ระบบการสืบค้นกลับที่เหมือนกัน: $ strace : strace: :: command not found $ strace true execve("/bin/true", ["true"], [/* 82 vars */]) = 0 [snip] exit_group(0) = ? ฉันพยายามทำให้แตกต่างstrace bash -c : 2>:.txtและstrace bash -c true …
15 bash  dash 

1
วิธีการส่งออกสตริงที่สมบูรณ์เพื่อ stdout?
บางส่วนของgitคำสั่งมีตัวเลือกมากมายและมันมักจะจะเป็นประโยชน์ในการค้นหาผ่านพวกเขาสำหรับความต้องการหนึ่งที่ฉัน - ฉันเป็นเพียงการมองหาตัวเลือกที่ควบคุมTABความกว้างในgit-guiแต่มีประมาณ 200 git configสำเร็จ วิธีแก้ปัญหาที่ชัดเจนคือการคัดลอกความสำเร็จทั้งหมดลงในเครื่องมือแก้ไขและค้นหาผ่านสิ่งเหล่านั้น แต่ฉันอยากทำ [something] | grep tab ไม่มีmanหรือinfoหน้าสำหรับcompgen, help compgenไม่ได้อธิบายตัวเลือกของตัวเองและไม่มีอัตโนมัติที่สมบูรณ์แบบสำหรับcompgen(ว่าที่สำหรับประชด?) PS: compgen -Aไม่ทำงาน PPS: นี่ไม่ใช่คำถามเกี่ยวกับgit-gui- วิธีแก้ปัญหาสำหรับความกว้างของแท็บเป็นที่อื่น PPPS: นี่คือไม่ได้เกี่ยวกับคำสั่งอัตโนมัติเสร็จสิ้นเพียงพารามิเตอร์ของคำสั่ง

4
การวางจากคลิปบอร์ดไปยัง zsh หรือ bash เชลล์ที่เปิดใช้งาน vi
ฉันต้องการวางจากคลิปบอร์ดของระบบ (หรือการเลือกข้อความ) ลงในเชลล์พร้อมคำสั่งแบบ "vi-like" โดยใช้แป้นพิมพ์ ปกติฉันจะใช้ zsh และบางครั้งก็ทุบตี ในทั้งสองกรณีฉันมีการตั้งค่าเชลล์ที่มีพฤติกรรมคล้าย vi ( bindkey -v/ set -o vi) "+pในกลุ่มพฤติกรรมฉันกำลังมองหาที่สามารถใช้ได้กับลำดับที่สำคัญ ลำดับของคีย์เฉพาะนี้ไม่ทำงานอย่างที่คาดไว้ใน shell prompt ที่เปิดใช้งาน vi มีวิธีใดบ้างที่จะเปิดใช้งานสิ่งนี้หรือลักษณะการทำงานที่คล้ายกันโดยใช้แป้นพิมพ์เท่านั้นในขณะที่ยังคงอยู่กับการทำ keybindings เหมือน vi ในพรอมต์ zsh หรือ bash shell? - แก้ไข - กรณีการใช้งาน: ฉันมักจะนำทางระหว่าง Firefox ด้วยPentadactyl addon , เทอร์มินัลอีมูเลเตอร์และกลุ่มตัวเอง - โดยใช้ตัวจัดการหน้าต่างXmonadด้วยปุ่มที่กำหนดเองเพื่อเลื่อนไปมา ทั้งสามโปรแกรมมีการโยงคีย์คล้าย vi ซึ่งมีประสิทธิภาพมาก (สำหรับ "หน่วยความจำนิ้ว") ดังนั้นจึงเป็นข้อความในอุดมคติสำหรับการสื่อสารระหว่างกันโดยใช้ไวยากรณ์ vim …
15 bash  shell  zsh  vi  clipboard 

2
วิธีหนึ่งสามารถรูทเชลล์ออกหลังจากระยะเวลาหนึ่งได้อย่างไร
มีวิธีการ 'หมดเวลาใช้งาน' รูทเชลล์ (ตัวอย่างเช่นในgnome-terminal) เพื่อให้หลังจากระยะเวลาหนึ่งไม่ออกคำสั่งใด ๆ เชลล์จะออกหรือไม่ ฉันกำลังค้นหาโซลูชันที่ทำงานbashกับ Fedora และในkshOpenBSD
15 bash  ksh 

5
วิธีรันคำสั่ง 1 จาก N ครั้งใน Bash
ฉันต้องการวิธีเรียกใช้คำสั่งแบบสุ่มพูด 1 จาก 10 ครั้ง มี builtin หรือ GNU coreutil ทำสิ่งนี้นึกคิด: chance 10 && do_stuff ที่do_stuffจะดำเนินการเพียง 1 ใน 10 ครั้ง? ฉันรู้ว่าฉันสามารถเขียนสคริปต์ได้ แต่ดูเหมือนว่าค่อนข้างง่ายและฉันสงสัยว่ามีวิธีที่กำหนดไว้หรือไม่

4
เหตุใดการลบประวัติทุบตีจึงไม่เพียงพอ
ฉันเคยคิดว่าการลบประวัติทุบตีของฉันก็เพียงพอแล้วที่จะล้างประวัติทุบตีของฉัน แต่เมื่อวานแมวของฉันทำเลอะรอบด้านขวาของแป้นพิมพ์ของฉันและเมื่อฉันกลับไปที่คอมพิวเตอร์ของฉันฉันเห็นสิ่งที่ฉันพิมพ์เมื่อเดือนที่แล้ว กดปุ่มทั้งหมดอย่างบ้าคลั่งที่กำลังมองหาสิ่งที่อาจก่อให้เกิดมัน ปรากฎคีย์ UPARROW แสดงประวัติการทุบตีของฉันแม้หลังจากลบ. bash_history แล้ว ฉันจะลบประวัติทุบตีของจริงได้อย่างไร
15 linux  bash  bashrc 

1
bash-static ใช้ทำอะไร?
วัตถุประสงค์ของการทุบตีคงที่เมื่อเทียบกับทุบตีปกติคืออะไร? มันดีเหมือนเปลือกกู้ภัยหรือดีหรือเปล่า?

1
`set -e` และ` grep` idiom เพื่อป้องกันการออกจาก shell script ก่อนเมื่อไม่พบ pattern
ต้องการความช่วยเหลือ - ในบริบทของเชลล์สคริปต์บน GNU / LINUX ทุบตี: set -eฉันมักจะใช้ บ่อยครั้งที่ฉันต้องการgrepและไม่ต้องการให้สคริปต์ยุติการทำงานหากgrepมีสถานะออกจากการ1ระบุรูปแบบที่ไม่พบ บางครั้งฉันได้พยายามที่จะแก้ปัญหานี้มีดังนี้: (ลองฉัน) ถ้าset +o pipefailและเรียก grep ด้วยบางอย่างเช่นนี้grep 'p' | wc -lฉันจะได้รับพฤติกรรมที่ต้องการจนกว่าผู้ดูแลในอนาคตจะเปิดpipefailใช้งาน นอกจากนี้ฉันชอบเปิดใช้งานpipefailสิ่งนี้ไม่ได้ผลสำหรับฉัน (ลอง II) ใช้รูปแบบการจับคู่ลายเส้นและsedหรือawkเท่านั้นจากนั้นwcจับคู่บรรทัดเพื่อทดสอบรูปแบบที่ตรงกัน ฉันไม่ชอบตัวเลือกนี้เพราะใช้sedจะgrepดูเหมือนว่าวิธีแก้ปัญหาสำหรับปัญหาที่แท้จริงของฉัน (ลอง III) อัน นี้เป็นรายการโปรดของฉัน - สิ่งที่ชอบ:set +e; grep 'p'; set-e ความเข้าใจ / สำนวนใด ๆ ที่จะได้รับการชื่นชมมากที่สุด - ขอบคุณ
15 bash  grep  gnu  coreutils 

1
เหตุใดจึงไม่ Ctrl + m และ Ctrl + q ใช้ในทางลัด bash
เมื่อเร็ว ๆ นี้ฉันได้ตรวจสอบปุ่มทางลัดทุบตีและพยายามหาปุ่มที่เหมาะสมสำหรับรหัสเปิดใช้งาน tmux ของฉัน ฉันคิดว่ามันน่าสนใจที่ctrl + mและctrl + qไม่ได้ใช้ในทางลัดทุบตีตามhttps://en.wikipedia.org/wiki/Bash_(Unix_shell) ทำไมพวกเขาไม่ใช้? ฉันรู้สึกว่าctrl + mมีประโยชน์มาก ชุดค่าผสมทั้งสองนี้มีจุดประสงค์จากการออกแบบเพื่อDIY (define it yourself)การใช้งานหรือไม่ หรือมีเรื่องอื่นหรือไม่

1
อัพเดตประวัติทุบตีในเทอร์มินัลอื่นเมื่อออกจากเทอร์มินัลหนึ่ง
ฉันรู้ว่าคำถามนี้ไม่ปิดบังเนื่องจากมีการถามที่นี่ให้อัปเดต (และทำซ้ำที่นี่) สิ่งที่ฉันพยายามทำให้สำเร็จนั้นต่างออกไปเล็กน้อย ฉันไม่ชอบความคิดที่จะให้ฉันเขียนไฟล์ใหม่ทุกครั้งที่lsฉันพิมพ์ ( history -a; history -c; history -r) ฉันต้องการอัปเดตไฟล์เมื่อออก ง่ายมาก (จริง ๆ แล้วเป็นค่าเริ่มต้น) แต่คุณต้องต่อท้ายแทนที่จะเขียนใหม่: shopt -s histappend ตอนนี้เมื่อปิดเทอร์มินัลฉันต้องการทำให้คนอื่น ๆ ทั้งหมดที่ยังคงเปิดอยู่เพื่อรับทราบการอัพเดต ฉันชอบทำสิ่งนี้โดยไม่ตรวจสอบผ่าน$PS1ทุกอย่างcommandที่ฉันพิมพ์ ฉันคิดว่ามันจะดีกว่าถ้าจะจับสัญญาณบางอย่าง คุณจะทำอย่างไร ถ้าไม่ได้เป็นไปได้อาจจะเป็นที่เรียบง่ายcronjob? เราจะไขปริศนานี้ได้อย่างไร?

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