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

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

2
ความแตกต่างระหว่าง \ e และ ^ [
Gilles เขียนว่า : ตัวละคร 27 = 033 = 0x1b = ^[=\e Demizey เขียนว่า : ^ [เป็นเพียงการนำเสนอของ ESCAPE และ \ e ถูกตีความว่าเป็นอักขระ ESCAPE จริง จากนั้นฉันก็พบบรรทัดนี้จากบทความ TechRepublic ตรวจสอบให้แน่ใจว่าคุณเขียนลำดับของคีย์เป็น \ e [24 ~ แทนที่จะเป็น ^ [[24 ~] นี่เป็นเพราะ ^ [ลำดับนั้นเทียบเท่ากับปุ่ม [Esc] ซึ่งแสดงโดย \ e ในเชลล์ ตัวอย่างเช่นถ้าลำดับของคีย์เป็น ^ [[OP ผลการผูกโค้ดที่จะใช้จะเป็น \ e [OP แต่ฉันใช้การแม็พที่ใช้ …

2
วิธีแบ็คกราวน์คำสั่ง?
cp a b && mv b c && rm aฉันต้องการที่จะพื้นหลังห่วงโซ่คำสั่งเช่น ฉันได้ลองทำแล้วcp a b && mv b c && rm a &แต่นี่เป็นเพียงกระบวนการขั้นตอนสุดท้ายเท่านั้น ฉันจะพื้นหลังห่วงโซ่คำสั่งได้อย่างไร

1
ฉันจะเก็บรหัสสีด้วยอินพุต grep ได้อย่างไร
ถ้าฉันใช้สองgrepคำสั่งติดต่อกันเช่น: echo "foo bar" | grep foo | grep bar จากนั้นรูปแบบแรก ("foo") จะไม่ถูกเน้น ในความเป็นจริงดูเหมือนว่า grep จะลบรหัสสีออกจากอินพุต มีวิธีใดในการป้องกันสิ่งนี้หรือไม่?
15 shell  grep  colors 

6
sudo over ssh: ไม่มี tty present และไม่ได้ระบุโปรแกรม askpass
ฉันได้รับข้อผิดพลาดนี้และพยายามหลายวิธีที่กล่าวถึงทางออนไลน์เพื่อแก้ไขปัญหานี้ ฉันมีการตั้งค่าคีย์ SSH ดังนั้นเมื่อฉันเรียกใช้'ssh newton@host.com'จะเข้าสู่ระบบโดยอัตโนมัติฉันได้ตั้งค่าผู้ใช้นี้visudoให้เป็น'newton ALL=(ALL:ALL) ALL' ฉันจากนั้นพยายามเพิ่ม'newton ALL=NOPASSWD: /var/www/script.sh' น่าเสียดายที่ทุกครั้งที่วิ่งssh newton@host.com 'sudo /var/www/script.sh'จาก Cygwin ฉันจะกลับมา ฉันได้ลองเพิ่ม-t -tแล้ว แต่จะแจ้งรหัสผ่านให้ฉัน total size is 21209180 speedup is 314.69 sudo: no tty present and no askpass program specified Sorry, try again. sudo: no tty present and no askpass program specified Sorry, try again. …
15 shell  ssh  sudo 

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 / …

5
ฉันจะแปลงรูปภาพ. ลูกบาศก์ / .bin (ด้วยแทร็ก cdr) เป็นไฟล์. iso เดียวได้อย่างไร
ฉันจะแปลงรูปภาพ. ลูกบาศก์ / .bin (แทร็ก cdr) เป็นไฟล์. iso เดียวได้อย่างไร ฉันมี Fedora 16 (x86-64) Linux 3.1.9-1.fc16.x86_64 #1 SMP Fri Jan 13 16:37:42 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
15 shell  iso  data-cd  audio-cd 

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 

6
วิธีค้นหาคำในเนื้อหาทั้งหมดของไดเรกทอรีใน linux
ต้องค้นหาบางสิ่งในเนื้อหาทั้งหมด ฉันกำลังพยายาม: find . | xargs grep word ฉันได้รับข้อผิดพลาด: xargs: อัญประกาศ ทำอย่างไรจึงจะได้สิ่งนี้?
15 linux  shell  grep  find  xargs 

2
อักขระขึ้นบรรทัดใหม่ที่หายไปจากการทดแทนคำสั่งของฉันอยู่ที่ไหน
รหัสต่อไปนี้อธิบายสถานการณ์ได้ดีที่สุด เหตุใดบรรทัดสุดท้ายจึงไม่แสดงเอาต์พุตอักขระขึ้นบรรทัดใหม่ เอาต์พุตของแต่ละบรรทัดจะแสดงในความคิดเห็น ฉันใช้GNU bash เวอร์ชัน 4.1.5 echo -n $'a\nb\n' | xxd -p # 610a620a x=$'a\nb\n' ; echo -n "$x" | xxd -p # 610a620a echo -ne "a\nb\n" | xxd -p # 610a620a x="$(echo -ne "a\nb\n")" ; echo -n "$x" | xxd -p # 610a62

7
ฉันจะเปลี่ยนการประทับเวลาของโฟลเดอร์เป็นไฟล์ใหม่ล่าสุดซ้ำได้อย่างไร
ฉันสงสัยว่าถ้าใครรู้วิธีเปลี่ยนการประทับเวลาของโฟลเดอร์ซ้ำโดยอ้างอิงจากการประทับเวลาล่าสุดที่พบของไฟล์ในโฟลเดอร์นั้น ตัวอย่างเช่น: jon @ UbuntuPanther: / media / media / MP3s / Foo Fighters / (1997-05-20) The Color and The Shape $ ls -alF รวม 55220 drwxr-xr-x 2 จอนจอน 4096 2010-08-30 12:34 ./ drwxr-xr-x 11 จอนจอน 4096 2010-08-30 12:34 ../ -rw-r - r-- 1 jon jon 1694044 2010-04-18 00:51 Foo …

2
มีวิธีดักจับการสื่อสารระหว่างกระบวนการใน Unix / Linux หรือไม่?
สำหรับ intercepting / การวิเคราะห์เครือข่ายการจราจรเรามียูทิลิตี้ที่เรียกว่าWireshark เรามียูทิลิตีที่คล้ายกันเพื่อสกัดกั้นการสื่อสารระหว่างกระบวนการทั้งหมดระหว่างสองกระบวนการใน Unix / Linux หรือไม่? ฉันได้สร้างกระบวนการบางอย่างในหน่วยความจำและฉันต้องการโปรไฟล์ว่าพวกเขาสื่อสารกันอย่างไร

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

3
บันทึกรหัสออกในภายหลัง
ดังนั้นฉันจึงมีสคริปต์เล็กน้อยสำหรับการทดสอบบางอย่าง javac *.java && java -ea Test rm -f *.class ตอนนี้ปัญหาของเรื่องนี้ก็คือเมื่อฉันเรียกใช้สคริปต์./testก็จะส่งกลับรหัสทางออกที่ประสบความสำเร็จแม้ว่าการทดสอบล้มเหลวเพราะrm -f *.classประสบความสำเร็จ วิธีเดียวที่ฉันสามารถคิดให้มันทำในสิ่งที่ฉันต้องการรู้สึกน่าเกลียด: javac *.java && java -ea Test test_exit_code=$? rm -f *.class if [ "$test_exit_code" != 0 ] ; then false; fi แต่ดูเหมือนว่ามีปัญหาบางอย่างที่พบได้ทั่วไป - ทำงานทำความสะอาดแล้วส่งคืนรหัสทางออกของงานต้นฉบับ อะไรคือวิธีที่ใช้สำนวนที่สุดในการทำสิ่งนี้ (โดยทั่วไปคือทุบตีหรือแค่กระสุน)?

3
วิธีอ้างอาร์กิวเมนต์ด้วย xargs
สมมติว่าฉันต้องการลบไฟล์ทั้งหมดในโฟลเดอร์ที่มีขนาดใหญ่กว่า 1 MB $ find . -size +1M | xargs -0 rm นี่จะไม่ลบไฟล์ที่มีพื้นที่ว่างในชื่อ rmดังนั้นผมจึงต้องการที่จะพูดขัดแย้งทั้งหมดส่งไปยัง ถ้าfindให้มันSome report.docxมันควรจะผ่านไป"Some report.docx"rm ฉันจะทำสิ่งนั้นได้อย่างไร
15 shell  find  quoting  rm  xargs 

3
ฉันจะส่งต่อคีย์ ssh ที่ส่งต่อไปยัง tmux แล้วได้อย่างไร?
ฉันกำลังเชื่อมต่อผ่าน SSH จากเครื่องที่จัดเก็บคีย์ของฉันส่งต่อไปยังเครื่องที่สองจากนั้นลองใช้คีย์จากภายใน tmux ฉันดูเหมือนจะ "หลวม" การส่งต่อเมื่อเข้าสู่ tmux จะ "ส่งต่ออีกครั้ง" เพื่อให้ฉันสามารถใช้กุญแจของฉันจากภายใน tmux ได้อย่างไร? $ ssh [server] -o ForwardAgent=yes $ git pull # Succeeds. $ /bin/bash $ git pull # Still succeeds, despite new shell. $ exit $ tmux attach $ git pull # Permission denied (publickey)
15 shell  ssh  tmux 

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