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

Zsh เป็นเชลล์ที่มีคุณสมบัติบรรทัดคำสั่งและสคริปต์ขั้นสูงมากมาย

1
ทำไมการส่งเสียงเป็นกลุ่มใน EDITOR ใน zsh จึงปิดการใช้งานแป้นพิมพ์ลัด?
.zshrcหน้าตาของฉันเป็นแบบนี้: export EDITOR="/usr/bin/vim" ตอนนี้เมื่อฉันเปิดเทอร์มินัลและป้อนแป้นพิมพ์ลัดctrlaเพื่อไปที่จุดเริ่มต้นของบรรทัดมันไม่ทำงาน แต่สตริง^A(หรือสตริงอื่น ๆ ขึ้นอยู่กับทางลัดที่ฉันป้อน) เข้าสู่เทอร์มินัล: emlai:~ % ^A การลบคำexportออกจาก.zshrcทำให้แป้นพิมพ์ลัดทำงานได้อย่างถูกต้อง: EDITOR="/usr/bin/vim" การส่งออกEDITORเป็นอย่างอื่นvimทำให้แป้นพิมพ์ลัดทำงานเช่นกัน: export EDITOR="/usr/bin/nano" ทำไมสิ่งนี้ถึงเกิดขึ้น ฉันทดสอบสิ่งนี้ด้วยbashเช่นกันและแป้นพิมพ์ลัดจะทำงานอย่างถูกต้องในทุกกรณีที่นั่น

2
มีวิธีการตั้งค่าการระบายสีสำหรับแท็บซีดีเสร็จสมบูรณ์หรือไม่
ฉันใช้ Ubuntu 11.04 มีวิธีการตั้งค่าการระบายสีสำหรับการส่งออกหลังจากรายการแท็บเสร็จสมบูรณ์ของ cd, ls หรืออื่น ๆ ? กล่าวคือ myshell@root$ cd ~/user/files/ ฉันกดแท็บ ... myfile myfoo mybar <- ผลลัพธ์นี้เป็นสี? ฉันหวังว่าคุณจะสนุกกับแผนภาพของฉัน

7
ทดแทนสองและสามในทุบตีและ zsh
ติดตามส่วนพื้นหลังในคำถามนี้ ในbashที่ฉันสามารถใช้เพื่อทดแทนคู่ใน${!FOO} zsh ${(P)FOO}ทั้งในโรงเรียนเก่า (แฮ็ค - y) eval \$$FOOทำงาน ดังนั้นสิ่งที่ฉลาดและสมเหตุสมผลที่สุดสำหรับฉันคือ${${FOO}}, ${${${FOO}}}…การทดแทนสอง / สาม / n เหตุใดจึงไม่ทำงานตามที่คาดไว้ ประการที่สอง: สิ่งที่\ทำในevalคำสั่ง? ฉันคิดว่ามันเป็นการหลบหนีทำให้บางอย่างeval \$$$FOOเป็นไปไม่ได้ จะทำการทดแทนแบบสาม / n ด้วยสิ่งนั้นได้อย่างไรในทุกเชลล์?

5
`zstyle 'ทำอะไร
zstyleดูเหมือนว่ามันเป็นเพียงศูนย์กลางในการจัดเก็บและดึงข้อมูลเช่นทางเลือกในการexportเชลล์พารามิเตอร์ มันเป็นเรื่องจริงหรือมีมากกว่านั้น?
23 zsh 

1
เสร็จสมบูรณ์สำหรับอาร์กิวเมนต์แรกของ cd OLD NEW
ในzshการcdออกคำสั่งมีรูปแบบสองอาร์กิวเมนต์: การเปลี่ยนแปลงcd OLD NEW ${PWD/OLD/NEW}ด้วยระบบการทำให้สมบูรณ์สไตล์ใหม่ zsh สามารถทำให้เสร็จสมบูรณ์ได้NEW: อาร์กิวเมนต์ที่สองเสร็จสมบูรณ์ตามสิ่งที่OLDสามารถทดแทนได้เพื่อให้ได้ไดเรกทอรีที่มีอยู่ แต่อาร์กิวเมนต์แรกจะเสร็จสมบูรณ์ไปยังไดเรกทอรีที่มีอยู่เท่านั้น ฉันจะให้ zsh เสนอความสำเร็จที่เป็นค่าที่เป็นไปได้OLDนอกเหนือจากการทำไดเรกทอรีที่มีอยู่ให้สมบูรณ์ได้อย่างไร ตัวอย่างเช่นถ้าไดเรกทอรีปัจจุบัน/path/to/fooและยังมีไดเรกทอรี/also/to/fooและ/path/to/foo/primeแล้วcd pTabเสร็จไปp primeถ้าฉันตั้งใจจะวิ่งcd path alsoฉันก็อยากให้ zsh เสนอให้pathเหมือนกัน อย่างไร? การใช้ค่าที่พิมพ์ไว้แล้วของอาร์กิวเมนต์ที่สองเพื่อ จำกัด ความเป็นไปได้สำหรับอาร์กิวเมนต์แรกนั้นจะเป็นค่าบวก

1
ส้อมระเบิดทำงานอย่างไร
คำเตือนอย่าพยายามเรียกใช้สิ่งนี้บนเครื่องผลิต ในการอ่านหน้า Wikipedia ในหัวข้อฉันมักจะติดตามสิ่งที่เกิดขึ้นด้วยรหัสต่อไปนี้: :(){ :|:& };: ตัดตอนมาจากคำอธิบาย ระเบิดส้อมต่อไปนี้ถูกนำเสนอเป็นศิลปะในปี 2002;56 แหล่งกำเนิดที่แน่นอนของมันไม่เป็นที่รู้จัก แต่มันอยู่บน Usenet ปี 2002 ก่อนที่จะระเบิดจะถูกดำเนินการโดยการวางต่อไปนี้ 13 ตัวเป็น UNIXเปลือกเช่นทุบตีหรือzsh มันทำงานโดยการกำหนดฟังก์ชั่นที่เรียกว่า ':' ซึ่งเรียกตัวเองว่าสองครั้งหนึ่งครั้งในเบื้องหน้าและอีกครั้งในพื้นหลัง อย่างไรก็ตามบิตสุดท้ายไม่ชัดเจนสำหรับฉัน ฉันเห็นนิยามของฟังก์ชัน: :(){ ... } แต่จะเกิดอะไรขึ้น นอกจากนี้ยังทำหอยอื่น ๆ เช่นksh, cshและtcshยังประสบชะตากรรมเดียวกันของความสามารถที่จะสร้างบางสิ่งบางอย่างที่คล้ายกัน?
22 bash  shell-script  zsh  fork 

4
เป็นไปได้หรือไม่ที่จะรวมไฟล์ไว้ในไฟล์กำหนดค่าของ zsh? อย่างไร?
ฉันต้องการไฟล์เช่น f ที่มีนามแฝง zsh เท่านั้น (เหตุผลความบริสุทธิ์) แล้วฉันต้องการรวมฉแฟ้มในของฉัน.zshrcไฟล์เพื่อให้นามแฝงที่กำหนดไว้ในฉมองเห็นได้ใน.zshrc มันเป็นไปได้? ถ้าเป็นเช่นนั้นฉันสามารถสร้างสคริปต์เช่น my_alias( $my_alias ll 'ls -l') ซึ่งเพิ่มชื่อแทนให้ไฟล์f แน่นอนฉันสามารถทำได้ $echo {alias command} >> ~/.zshrc แต่สิ่งนี้ทำให้. zshrcเป็นระเบียบหนึ่ง นอกจากนี้มันเป็นอย่างไรในทุบตี? UPDATE หากใครบางคนแบ่งปันความคิดของฉันนี่คือวิธีการแก้ขอบคุณ phunehehe: # source aliases ALIASFILE=~/.aliasesrc source $ALIASFILE function add_alias() { if [[ -z $1 || -z $2 || $# -gt 2 ]]; then echo …

4
ZSH: ประวัติการค้นหาบนปุ่มขึ้นและลง?
ขณะนี้ฉันมีสิ่งต่อไปนี้ใน. zshrc ของฉัน: bindkey '^[[A' up-line-or-search bindkey '^[[B' down-line-or-search อย่างไรก็ตามดูเหมือนว่าจะตรงกับเนื้อหาของอินพุตปัจจุบันของฉันก่อนที่จะมีอักขระเว้นวรรค ตัวอย่างเช่นsudo ls /จะจับคู่ทุกบรรทัดในประวัติของฉันที่ขึ้นต้นด้วยsudoในขณะที่ฉันต้องการให้จับคู่ทุกบรรทัดที่ตรงกับข้อมูลที่ฉันป้อนทั้งหมดเท่านั้น (เช่นsudo ls /etcจะจับคู่ แต่ไม่ใช่sudo cat /var/log/messages) ฉันต้องเปลี่ยนอะไรเพื่อให้ได้พฤติกรรมตามที่ต้องการ นี่คือ. zshrc ทั้งหมดของฉันในกรณีที่มีความเกี่ยวข้อง: https://gist.github.com/919566

1
การใช้ตัวแก้ไขบรรทัดของ zsh เพื่อล้อมรอบกระบวนการย่อย
เป็นไปได้หรือไม่ที่จะใช้ตัวแก้ไขบรรทัดในตัวของ zsh ( zle) เพื่อป้อนข้อมูลเข้าสู่กระบวนการย่อย? นั่นคือผมอยากจะทำงานzlewrap mycommandที่zlewrapเป็นฟังก์ชั่น zsh และmycommandเป็นโปรแกรมใด ๆ ที่เพียงแค่อ่านบรรทัดจาก stdin; zlewrapได้อย่างมีประสิทธิภาพจะช่วยให้ความสามารถในการแก้ไขบรรทัด zle mycommandไป นี่คือรูปแบบของrlwrapที่ใช้เพียงแค่นี้ แต่มี readline และไม่ zle สำหรับการแก้ไขบรรทัด
22 zsh  line-editor 

1
วิธีค้นหาไฟล์ที่กำหนดนามแฝง
ฉันมีปัญหาฉันไม่แน่ใจว่าจะไปไหนมาไหน บางที่ในระบบของฉันฉันมีชื่อแทนเช่น: alias subl=\''/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl'\' ฉันไม่แน่ใจว่าไฟล์นี้เป็นอะไรและฉันต้องการที่จะเปลี่ยน (หรือลบออกจริง) มัน ฉันสามารถ unalias ได้ใน. zshrc ของฉัน แต่นั่นไม่ใช่วิธีการแก้ปัญหาที่สวยงาม เมื่อฉันวิ่งalias | grep sublมันแสดงนามแฝงแก่ฉัน มีวิธีที่ฉันจะให้มันสะท้อนเส้นทางไปยังไฟล์ที่กำหนดนามแฝงหรือไม่? ขอบคุณ
22 zsh  alias  search  oh-my-zsh 

2
วิธีกำจัด "ไม่พบที่ตรงกัน" เมื่อเรียกใช้ "rm *"
ใช้zshฉันได้รับข้อความ "ไม่พบการจับคู่" เมื่อเลือกรูปแบบที่ไม่เหมาะสมrmและแม้เมื่อเปลี่ยนเส้นทางผลลัพธ์ # rm * > /dev/zero 2>&1 zsh: no matches found: * ฉันจะกำจัดข้อความนี้ได้อย่างไร
22 zsh  wildcards  rm 

1
เป็น ((…)) {…;} ไวยากรณ์เชลล์ที่ถูกต้องหรือไม่ หอยไหน?
การแสดงออก: $ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}' 0 1 2 3 4 ทำงานอย่างถูกต้อง ฉันล้มเหลวในการค้นหาคำอธิบายของไวยากรณ์นี้ซึ่ง{...;}แทนที่ด้วย; do ...; doneในคู่มือ มีการอ้างอิงในคู่มือหรือไม่? เชลล์ใดที่ทำงานได้ถูกต้อง?
21 bash  shell  zsh  ksh 

4
อักขระตัวแรกของคำสั่งซ้ำบนจอแสดงผลเมื่อเสร็จสิ้น
สองตัวอักษรแรกซ้ำแล้วซ้ำอีกในขณะที่ฉันใช้Tabให้เสร็จ ในภาพหน้าจอด้านล่างcdซ้ำแล้วซ้ำอีก ฉันลอง rxvt-unicdoe, xterm, terminator แล้ว เทอร์มินัลอีมูเลเตอร์ทั้งหมดมีปัญหานี้ Zsh เวอร์ชั่น 5.0.2, ไฟล์กำหนดค่าon-my-zsh

6
รับลิงก์ที่สัมพันธ์กันระหว่างสองพา ธ
ว่าฉันมีสองเส้นทาง: และ<source_path> <target_path>ฉันต้องการเปลือกของฉัน (zsh) เพื่อค้นหาโดยอัตโนมัติหากมีวิธีที่จะแสดง<target_path>จาก<source_path>เป็นเส้นทางญาติ เช่นสมมติว่า <source_path> คือ /foo/bar/something <target_path> คือ /foo/hello/world ผลที่ได้ก็คือ ../../hello/world ทำไมฉันต้องการสิ่งนี้: ฉันต้องการที่จะสร้างการเชื่อมโยงสัญลักษณ์จาก<source_path>การ<target_path>ใช้ญาติเชื่อมโยงสัญลักษณ์เมื่อใดก็ตามที่เป็นไปได้ตั้งแต่มิฉะนั้นเซิร์ฟเวอร์แซมบ้าของเราไม่ได้แสดงไฟล์ได้อย่างถูกต้องเมื่อฉันเข้าถึงไฟล์เหล่านี้บนเครือข่ายจาก Windows (ที่ผมไม่ได้เป็นผู้ดูแลระบบ SYS และ Don' ไม่มีการควบคุมการตั้งค่านี้) สมมติว่า<target_path>และ<source_path>เป็นเส้นทางที่แน่นอนต่อไปนี้จะสร้างการเชื่อมโยงสัญลักษณ์ที่ชี้ไปยังเส้นทางที่แน่นอน ln -s <target_path> <source_path> ดังนั้นมันจึงไม่ทำงานสำหรับความต้องการของฉัน ฉันต้องทำสิ่งนี้กับไฟล์หลายร้อยไฟล์ดังนั้นฉันไม่สามารถแก้ไขด้วยตนเองได้ บิวด์อินใด ๆ ที่ดูแลสิ่งนี้?
21 shell  files  zsh  symlink 

1
เพิ่มอาร์กิวเมนต์จากคำสั่งก่อนหน้าไปยังการเติม zsh ให้สมบูรณ์
ใน zsh (รวมถึง bash) คุณสามารถใช้การขยายคำประวัติเพื่อแสดงถึงอาร์กิวเมนต์จากคำสั่งก่อนหน้า ตัวอย่างนี้แสดงการรับพารามิเตอร์ที่ 2 จากคำสั่งก่อนหน้าในประวัติที่มี!:#การขยาย: % echo foo bar baz foo bar baz % echo !:2 echo bar bar ฉันมักจะลืมสิ่งที่ # พารามิเตอร์อาร์กิวเมนต์เฉพาะคือและการพิมพ์!:#ไม่เสมอว่ารวดเร็วเมื่อฉันจำได้ว่ามันขัดแย้ง ฉันรู้ว่าmeta-.จะแทนที่อาร์กิวเมนต์สุดท้าย แต่บางครั้งก็ไม่ใช่อาร์กิวเมนต์สุดท้ายที่ฉันต้องการ ฉันต้องการเพิ่มข้อโต้แย้งจากคำสั่งก่อนหน้าเป็นข้อเสนอแนะเพื่อดำเนินการคำสั่งใด ๆ ที่ฉันพิมพ์ใน zsh ฉันสามารถหาวิธีสร้างฟังก์ชันเชลล์ที่สามารถสร้างอาร์เรย์ของอาร์กิวเมนต์ (0..N) จากคำสั่งสุดท้ายและผูกเข้ากับคำสั่งเฉพาะ _last_command_args() { last_command=$history[$[HISTCMD-1]] last_command_array=("${(s/ /)last_command}") _sep_parts last_command_array } # trying to get last_command_args to be suggested …
21 zsh  autocomplete 

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