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

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

2
แสดงเนื้อหาด้านล่างของพรอมต์ที่ shell prompt หรือไม่
ช่วยบอกว่าพรอมต์ของฉันเป็นแบบนี้ (_ แทนเคอร์เซอร์ของฉัน) ~ % _ มีวิธีใดที่ฉันจะทำให้มันเป็นแบบนี้ ~ % _ [some status] คำถามเดิมเกี่ยวกับ zsh แต่ตอนนี้มีคำตอบอื่น ๆ
21 bash  zsh  prompt 

3
ฉันจะขยายตัวแปรที่ยกมาเป็นอะไรถ้ามันว่างเปล่า?
ว่าฉันมีสคริปต์ทำ: some-command "$var1" "$var2" ... และในกรณีที่var1ว่างเปล่าฉันอยากจะแทนที่ด้วยไม่มีอะไรแทนที่สตริงว่างดังนั้นคำสั่งที่ดำเนินการคือ: some-command "$var2" ... และไม่: some-command '' "$var2" ... มีวิธีที่ง่ายกว่าการทดสอบตัวแปรและเงื่อนไขรวมถึงมันได้หรือไม่ if [ -n "$1" ]; then some-command "$var1" "$var2" ... # or some variant using arrays to build the command # args+=("$var1") else some-command "$var2" ... fi มีการทดแทนพารามิเตอร์มากกว่าที่สามารถขยายไปเป็นอะไรใน bash, zsh หรือไม่ชอบ? ฉันอาจยังต้องการใช้ globbing ในส่วนที่เหลือของข้อโต้แย้งดังนั้นการปิดการใช้งานและการเลิกตัวแปรไม่ได้เป็นตัวเลือก

1
คอมไพล์ด้วย zsh: ชื่อไฟล์ที่มีช่องว่างไม่ได้รับการหลบหนีอย่างเหมาะสม
เสร็จสิ้น Git: ฉันมีปัญหากับการเติมข้อความอัตโนมัติของชื่อคอมไพล์ในระบบของฉัน ฉันใช้zsh(5.0.5) กับgit(1.9.3) ใน OS X (10.9.3) ทั้งสองzshและgitได้รับการติดตั้งผ่าน homebrew (เอาท์พุทเวอร์ชั่นเต็มอยู่ที่ด้านล่างของโพสต์) gitความสมบูรณ์ของชื่อไฟล์ไม่ได้เป็นการแทรกช่องว่างอย่างที่ฉันคาดไว้ เมื่อฉันพิมพ์ชื่อไฟล์ด้วยช่องว่างในชื่อเชลล์จะแทรกชื่อไฟล์โดยไม่ต้องเว้นช่องว่าง zshความสมบูรณ์ในตัวของมันไม่ได้ทำอย่างนี้ แต่gitทำอย่างนั้น นี่คือตัวอย่างของสิ่งที่ฉันเห็น ฉันมีที่เก็บซึ่งมีไฟล์ไม่กี่ไฟล์และมีช่องว่างในชื่อ % ls -la test test four - latest.txt test three.txt test two เชลล์แบ็กสแลชเชลล์จะหนีชื่อไฟล์ตามที่คาดไว้เมื่อฉันใช้การเติมข้อมูลด้วยแท็บเพื่อใส่ชื่อไฟล์ % echo "testing" >> test<tab> การเติมข้อความอัตโนมัติให้กับสิ่งนี้หลังจากกดปุ่มแท็บสามครั้ง % echo "testing" >> test\ four\ -\ latest.txt ––– file test test\ four\ …
20 zsh  autocomplete  git 

3
ลบประเภทไฟล์ทั้งหมดยกเว้นหนึ่งประเภทขึ้นไป
ฉันพยายามค้นหาคำสั่งเพื่อลบไฟล์ทั้งหมดในโฟลเดอร์ แต่ไม่ใช่ประเภทไฟล์ แต่ดูเหมือนว่าฉันจะไม่มีโชค สิ่งที่ฉันลองมาแล้ว: set extended_glob rm !(*.dmg) # this returns zsh:number expected rm ./^*.dmg # this returns no matches found รุ่นของ zsh zsh 5.0.2 (x86_64-apple-darwin13.0.1)ฉันใช้เป็น
20 zsh  wildcards 

3
มีข้อเสียของการตั้งค่า 'noclobber' หรือไม่?
รับที่zshสามารถอุดตันไฟล์ทั้งหมดที่ได้รับคำสั่ง: >* ฉันคิดว่าการตั้งค่าตัวเลือกnoclobberจะเป็นความคิดที่ดี ฉันสามารถใช้งานได้ตลอดเวลา>| fileหากฉันต้องการใช้พฤติกรรมการปิดบังเริ่มต้นทั้งใน bash และ zsh (zsh ยังอนุญาตให้ใช้ไวยากรณ์ทางเลือก>!file) ฉันคาดว่าnoclobberจะไม่ได้รับการตั้งค่าเริ่มต้นเนื่องจากความเข้ากันได้ POSIX แต่เพื่อให้แน่ใจว่า: มีข้อเสียในการตั้งค่าnoclobberหรือไม่? อย่างไรก็ตามมีการตั้งค่าnoclobberสำหรับเชลล์แบบโต้ตอบเท่านั้นหรือไม่
20 bash  shell  zsh 

4
เส้นทาง shebangs อิสระ
ฉันมีสคริปต์ที่ฉันต้องการให้สามารถทำงานในสองเครื่อง เครื่องทั้งสองนี้รับสำเนาของสคริปต์จากที่เก็บ git เดียวกัน สคริปต์ต้องทำงานด้วยล่ามที่ถูกต้อง (เช่นzsh) น่าเสียดายที่ทั้งคู่ envและzshอาศัยอยู่ในสถานที่ต่าง ๆ ในเครื่องท้องถิ่นและระยะไกล: เครื่องรีโมต $ which env /bin/env $ which zsh /some/long/path/to/the/right/zsh เครื่องท้องถิ่น $ which env /usr/bin/env $which zsh /usr/local/bin/zsh ฉันสามารถตั้งค่า shebang เพื่อให้การทำงานสคริปต์ที่เป็น/path/to/script.shมักจะใช้Zshในที่มีอยู่PATH?
20 shell  zsh  cron  path 

2
เรียกใช้ตัวช่วยสร้างการใช้งาน Zsh ครั้งแรก
ฉันได้เลือกที่ไม่ถูกต้องเมื่อตั้งค่า Zsh เป็นครั้งแรกดังนั้นตอนนี้ฉันต้องการเรียกใช้ตัวช่วยสร้างการกำหนดค่า (สิ่งที่รันครั้งแรกที่คุณเข้าสู่ระบบ) อีกครั้ง ฉันจะทำสิ่งนี้ได้อย่างไร

5
วิธีการแสดงชื่อของ Virtualenv ปัจจุบัน?
ฉันใช้virtualenv, virtualenvwrapper, zsh, oh-my-zsh, เทอร์มิบน Crunchbang ฉันพยายามแสดงชื่อของกระแสvirtualenvเช่นนั้น workon example (example)... ฉันลองใช้วิธีแก้ปัญหาหลายอย่างแล้วดูเหมือนว่าจะไม่ทำงานนี่คือไฟล์. zshrc ของฉันฉันรู้ว่ามันไม่ใช่เรื่องใหญ่ที่จะแก้ไข แต่ฉันไม่สามารถหาโซลูชันที่เหมาะสมได้ เป็นเวลานานแล้วนับตั้งแต่ครั้งสุดท้ายที่ฉันใช้ Linux สำหรับการพัฒนา Django ฉันลืมสิ่งที่ฉันเคยทำ ตอนนี้ฉันเห็นusername@crunchbangแล้วฉันไม่สามารถบอกได้ว่า virtualenv ที่ฉันใช้อยู่

4
ค้นหาคำสั่งก่อนหน้าด้วยคำนำหน้าเหมือนกันเมื่อฉันกดขึ้นที่ shell prompt
มาจากโลก FreeBSD ฉันต้องการที่จะทำให้ลินุกซ์เทอร์มิประพฤติเช่น FreeBSD หนึ่งโดยเฉพาะอย่างยิ่งรุ่น 9.1 โดยทั่วไปเมื่อคุณพิมพ์cdในขั้วและผลักดัน "ขึ้น" ลูกศรที่คุณสามารถเรียกดูคำสั่งทั้งหมดในประวัติศาสตร์ที่เริ่มต้นด้วยcdซึ่งจะทำให้คุณ ได้รับเวลามาก ฉันไม่ทราบวิธีการเปิดใช้งานคุณสมบัตินี้ใน Linux Debian หรือ CentOS ซึ่งบังคับให้ฉันพิมพ์ทั้งหมดคนสามารถช่วยได้

3
วิธีลบส่วนหนึ่งของเส้นทางในเชลล์แบบโต้ตอบได้อย่างไร
มีทางลัดใน bash และ zsh เพื่อลบองค์ประกอบหนึ่งของเส้นทางหรือไม่? ตัวอย่างเช่นถ้าฉันพิมพ์ls ~/local/color/และเคอร์เซอร์อยู่ที่ท้ายบรรทัดมีทางลัดในการลบcolor/ที่ท้ายหรือไม่ เป็นการดีที่ฉันต้องการโซลูชันทั้งในโหมด vi และโหมด emacs
19 bash  shell  zsh 

4
การรัน chsh ไม่เปลี่ยนเชลล์
ฉันต้องการเปลี่ยนเชลล์จาก bash เป็น zsh ฉันได้ลองใช้งานสิ่งต่อไปนี้ขณะที่ล็อกอินในฐานะผู้ใช้ของ zol: $ chsh -s /bin/zsh $ sudo chsh -s /bin/zsh zol $ su -c 'chsh -s /bin/zsh zol' # The above all results with: $ password: $ chsh: Shell not changed. # zsh exists in /etc/shells.. chsh -l /bin/sh /bin/bash /sbin/nologin /bin/zsh มีอะไรผิดปกติ? ฉันจะแก้ไขได้อย่างไร
19 shell  zsh  users 

1
ตัวอักษรในคำสั่ง "fc" หมายถึงอะไร
ฉันเพิ่งเจอfcคำสั่งที่ให้คุณแก้ไขคำสั่งก่อนหน้าและออกในภายหลัง มันมีFCEDITตัวแปรสภาพแวดล้อมของตัวเองสำหรับการตั้งค่าการแก้ไขและหน้าคนในคู่มือโปรแกรมเมอร์ POSIX ( 1p) มันสร้างไฟล์ใน/tmpไดเรกทอรีและดำเนินการเนื้อหาหากไฟล์ถูกบันทึกไว้ ( :wqในvim) นอกจากนั้นยังสามารถกำหนดหมายเลขและรายการfc -lคำสั่งที่เรียกใช้ก่อนหน้านี้ให้เลือก ดังนั้นจึงเป็นคำสั่งที่ดีและมีประโยชน์ที่จะรู้ คำถามคือชื่อของมันหมายถึงอะไรจริงๆ; วิธีการเชื่อมโยงคำสั่งกับฟังก์ชั่นในใจ? "ชั้นหนึ่ง"? หรืออาจเป็นเพียงแค่ "ฟังก์ชั่น" (สิ่งที่อยู่ในใจของฉันหลังจากเขียนประโยคก่อนหน้า)? คู่มืออ้างถึงอย่างง่าย ๆ ว่า "ยูทิลิตี้ fc"
19 zsh  command  posix 

1
การเติมข้อความอัตโนมัติแบบไดนามิก zsh สำหรับคำสั่งที่กำหนดเอง
ฉันกำลังพยายามเขียนฟังก์ชั่นเสร็จสิ้นสำหรับฟังก์ชั่นที่กำหนดเองบางอย่างที่ฉันเขียน แต่ดูเหมือนจะดิ้นรนกับแม้แต่พื้นฐานที่สุด ฟังก์ชั่นตัวอย่างคือ: function eb_instances() { if [ "$#" -ne 2 ]; then echo "Usage eb_instances <aws profile name> <environment name>" echo "e.g.:" echo " eb_instances production kraken-prod-api" return 1 fi aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Name,Values=$2" --profile=$1 --output=json | jq -r ".Reservations[].Instances[].PrivateIpAddress" } สิ่งนี้มีสองข้อโต้แย้งตำแหน่ง<aws profile name>และ<environment name> ฉันต้องการตัวเลือกเสร็จสิ้นเพื่อ<aws profile …
19 zsh  autocomplete 

3
PS1 = '$ (pwd)' ทำไมมันถึงใช้งานได้และทำไมมันถึงแตกต่างจาก PS1 = $ (pwd)
เหตุใดเมื่อฉันป้อนคำสั่งนี้พรอมต์จึงเปลี่ยนไดเรกทอรีของฉัน PS1='$(pwd)' ฉันกำลังใช้เครื่องหมายคำพูดเดี่ยวซึ่งหมายถึงไม่มีการแก้ไขอาคาecho '$(pwd)'—— →$(pwd) ยิ่งไปกว่านั้นบอกว่าเราชี้แจงว่าทำไมสิ่งนี้ถึงได้ผล ... ทำไมมันถึงแตกต่างจากเดิมPS1=$(pwd)? (ไม่มีเครื่องหมายคำพูดเลย) โดยที่แตกต่างกันฉันหมายความว่าถ้าฉันใช้อัญประกาศแล้วพรอมต์จะเปลี่ยนไปยังไดเรกทอรีปัจจุบันของฉันในขณะที่ฉันนำทางผ่านสถานี แต่ถ้าฉันไม่ใช้เครื่องหมายคำพูดแล้วพรอมต์จะยังคงอยู่ในไดเรกทอรีที่ฉันอยู่เมื่อฉันป้อนคำสั่งครั้งแรกPS1=$(pwd) ทำไม?
18 bash  zsh  prompt  pwd 


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