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

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

11
ฉันจะค้นหาประวัติด้วยข้อความที่ป้อนไว้แล้วที่พร้อมท์ใน zsh ได้อย่างไร
ใน zsh, ฉันรู้ว่าฉันสามารถค้นหาประวัติกับ+Ctrl rอย่างไรก็ตามบ่อยครั้งที่ฉันเริ่มพิมพ์คำสั่งโดยตรงที่พรอมต์ แต่จากนั้นตระหนักว่าฉันควรจะค้นหาประวัติ เมื่อฉันกดCtrl+ rมันจะแสดงพรอมต์การค้นหาประวัติว่างดังนี้: แจ้งให้ทราบว่ามีข้อความที่ฉันแจ้งให้ แต่ไม่ได้ที่แจ้งให้ค้นหาประวัติ ฉันจะเริ่มการค้นหาประวัติด้วยข้อความที่มีอยู่ในพร้อมท์แล้วได้ดังนั้นจะมีลักษณะเช่นนี้:

1
สำหรับลูปใน zsh และ bash
ฉันได้สังเกตว่ามีสองวิธีในการสร้างลูปในzsh : for x (1 2 3); do echo $x; done for x in 1 2 3; do echo $x; done พวกเขาทั้งสองพิมพ์: 1 2 3 คำถามของฉันคือทำไมทั้งสองไวยากรณ์ มีการ$xทำซ้ำผ่านที่แตกต่างกันชนิดของวัตถุในแต่ละของพวกเขา? ไม่ทุบตีทำให้ความแตกต่างที่คล้ายกัน? ภาคผนวก: ทำไมงานต่อไปนี้: #!/bin/zsh a=1 b=2 c=5 d=(a b c) for x in $d; do print $x;done แต่อันนี้ไม่ได้: #!/bin/zsh a=1 b=2 c=5 d=(a …
57 bash  zsh 

5
วิธีกำหนดและโหลดฟังก์ชันเชลล์ของคุณเองใน zsh
ฉันมีช่วงเวลาที่ยากลำบากในการกำหนดและเรียกใช้ฟังก์ชันเชลล์ของฉันเองใน zsh ฉันทำตามคำแนะนำในเอกสารอย่างเป็นทางการและลองใช้ตัวอย่างง่ายๆก่อน แต่ฉันไม่สามารถทำงานได้ ฉันมีโฟลเดอร์: ~/.my_zsh_functions ในโฟลเดอร์นี้ฉันมีไฟล์ชื่อที่functions_1มีrwxสิทธิ์ผู้ใช้ ในไฟล์นี้ฉันได้กำหนดฟังก์ชั่นเชลล์ต่อไปนี้: my_function () { echo "Hello world"; } ฉันกำหนดFPATHให้ใส่เส้นทางไปยังโฟลเดอร์~/.my_zsh_functions: export FPATH=~/.my_zsh_functions:$FPATH ฉันสามารถยืนยันได้ว่าโฟลเดอร์.my_zsh_functionsอยู่ในเส้นทางของฟังก์ชั่นด้วยecho $FPATHหรือecho $fpath อย่างไรก็ตามถ้าฉันลองทำสิ่งต่อไปนี้จากเชลล์: > autoload my_function > my_function ฉันเข้าใจ: zsh: my_test_function: ไม่พบไฟล์การกำหนดฟังก์ชัน มีอะไรอีกบ้างที่ฉันต้องทำเพื่อให้สามารถโทรได้my_function? ปรับปรุง: คำตอบเพื่อให้ห่างไกลแนะนำการจัดหาไฟล์ด้วยฟังก์ชั่น zsh มันสมเหตุสมผลแล้ว แต่ฉันก็สับสนเล็กน้อย zsh ไม่ควรรู้ว่าไฟล์เหล่านั้นอยู่FPATHที่ไหน? ตอนนั้นมีจุดประสงค์autoloadอะไร?
54 shell-script  zsh 

6
ทำให้เปลือกเริ่มต้น zsh โดยไม่ต้องเข้าถึงราก
ฉันกำลังใช้เครื่องคอมพิวเตอร์โรงเรียนของฉันและต้องการที่จะใช้แทนzsh bashฉันต้องการที่จะทำให้มันเป็นเปลือกเริ่มต้น แต่ฉันไม่สามารถเรียกใช้คำสั่งเช่น$ chsh -s $(which zsh)เพราะฉันไม่มีสิทธิ์ของผู้ดูแลระบบ มีวิธีที่ฉันสามารถวางบางสิ่งบางอย่างในของฉัน.bashrcหรือสิ่งที่เรียกโดยอัตโนมัติzshเมื่อมันเปิดเป็นวิธีแก้ปัญหา? เพื่อชี้แจงzshมีการติดตั้งแล้ว
52 bash  zsh  login  profile 

3
การใช้รูปแบบ OR ในสัญลักษณ์ตัวแทนเชลล์
เนื้อหาของ dir ของฉันคือ $ ls -lrt total 0 -rw-r--r-- 1 user1 admin 19 Oct 8 12:31 night.txt -rw-r--r-- 1 user1 admin 19 Oct 8 12:31 noon.txt -rw-r--r-- 1 user1 admin 38 Oct 8 12:31 day.txt ฉันต้องการแสดงรายละเอียดของไฟล์ที่มีคำในชื่อไฟล์ตามที่ระบุ ตัวอย่าง: $ ls -lrt *day|night* ls: *day: No such file or directory bash: night.txt: …
52 bash  shell  zsh  ls  wildcards 

4
วิธีแก้ไขบรรทัดคำสั่งในเครื่องมือแก้ไขแบบเต็มหน้าจอใน ZSH
ใน bash โดยใช้โหมด vi หากฉันกดEsc, vบรรทัดคำสั่งปัจจุบันของฉันจะเปิดขึ้นในตัวแก้ไขที่ระบุโดย$EDITORและฉันสามารถแก้ไขได้แบบเต็มหน้าจอก่อนที่จะ 'บันทึก' คำสั่งเพื่อกลับสู่เชลล์และดำเนินการ ฉันจะบรรลุพฤติกรรมที่คล้ายกันใน zsh ได้อย่างไร การกดปุ่มvในโหมดคำสั่งส่งผลให้สัญญาณกระดิ่งและไม่มีผลกระทบที่ชัดเจนแม้จะมีEDITORการตั้งค่าตัวแปรสภาพแวดล้อม
52 zsh  editors 

1
อะไรคือความแตกต่างระหว่างเครื่องหมายคำพูด“ …”, '…', $ '…' และ $“ …”?
บางครั้งผมเห็นสคริปต์ใช้ทั้งหมดของวิธีการที่แตกต่างกันเหล่านี้อ้างข้อความบางส่วน: "...", '...', และ$'...' $"..."เหตุใดจึงมีการใช้เครื่องหมายคำพูดต่าง ๆ มากมาย? พวกเขามีพฤติกรรมที่แตกต่างหรือส่งผลกระทบต่อสิ่งที่ฉันสามารถทำได้ภายในพวกเขา?

6
เมื่อใดที่คุณใช้การขยายรั้ง
ฉันเข้าใจว่าการขยายรั้งคืออะไร แต่ฉันไม่รู้ว่าจะใช้งานได้อย่างไร คุณจะใช้เมื่อไหร่? กรุณาสอนตัวอย่างที่สะดวกและน่าทึ่งให้ฉันถ้าคุณมีเคล็ดลับของคุณเอง

2
ฉันจะค้นหาย้อนกลับในโหมด vi ของ ZSH ได้อย่างไร
ฉันใช้vimสำหรับความต้องการแก้ไขทั้งหมดของฉันดังนั้นฉันตัดสินใจลองใช้โหมด vi สำหรับเชลล์ของฉันอีกครั้ง (ปัจจุบัน ZSH w / oh-my-zsh บน OS X) แต่ฉันพบว่าตัวเองพยายาม (และล้มเหลว) เพื่อใช้งานCtrl-Rอย่างต่อเนื่อง คีย์ที่มีผลผูกพันเทียบเท่าคืออะไร และสำหรับการอ้างอิงในอนาคตฉันจะเข้าใจตัวเองได้อย่างไร ฉันค่อนข้างมั่นใจว่าฉันสามารถใช้bind -Pในการทุบตี

2
ทำไม ZSH ถึงลงท้ายด้วยเครื่องหมายเปอร์เซนต์ไฮไลต์?
ฉันพบสิ่งนี้ในบางโอกาสด้วยแอพพลิเคชั่นที่หลากหลาย ฉันมักจะคิดว่าเป็นเพราะผลผลิตถูกยกเลิกก่อน (ctrl + c เป็นต้น) หรือสิ่งที่คล้ายกันและ zsh เติมอักขระบรรทัดใหม่ แต่ตอนนี้ความอยากรู้อยากเห็นได้รับสิ่งที่ดีที่สุดของฉันเพราะมันดูเหมือนจะไม่ทำอย่างนี้ zsh ทุบตี Sequenceโปรแกรมเป็นสิ่งที่ฉันดึงออกมาจากหนังสือในขณะอ่านบน Java การรับรองและเพียงแค่ต้องการที่จะดูว่ามันจะรวบรวมและวิ่ง ฉันสังเกตเห็นว่ามันไม่ได้ใช้println()วิธีการจากSystem.outแพ็คเกจ / คลาส print()แต่มันใช้เก่าธรรมดา การขาดอักขระขึ้นบรรทัดใหม่เป็นเหตุผลที่ทำให้ฉันได้รับสัญลักษณ์นี้หรือไม่?
46 bash  zsh  prompt  newlines 

10
ทำให้โหมดแสดงพรอมต์ zsh ของฉันในโหมด vi
ฉันใช้bindkey -v(สำหรับ bash-ers set -o viฉันคิดว่ามันใช้งานได้ในโหมด zsh ด้วย) หรือโหมด vi (m) แต่มันทำให้ฉันสับสนว่าฉันไม่มีคิวภาพใด ๆ ที่จะบอกฉันว่าฉันอยู่ในโหมดแทรกหรือโหมดคำสั่ง ไม่มีใครรู้ว่าฉันจะทำให้โหมดการแสดงพร้อมท์ของฉันปรากฏขึ้นได้อย่างไร?
44 shell  prompt  zsh 


3
วิธีรวบรวมอาร์เรย์ของเส้นอย่างถูกต้องใน zsh
ฉันคิดว่าต่อไปนี้จะจัดกลุ่มผลลัพธ์ของmy_commandอาร์เรย์หลายบรรทัด: IFS='\n' array_of_lines=$(my_command); ดังนั้น$array_of_lines[1]จะหมายถึงบรรทัดแรกในผลลัพธ์ของmy_command, $array_of_lines[2]ถึงวินาทีและอื่น ๆ อย่างไรก็ตามคำสั่งด้านบนนั้นใช้งานไม่ได้ ดูเหมือนว่าจะแยกเอาท์พุทของmy_commandตัวละครรอบตัวnออกไปตามที่ฉันได้ตรวจสอบด้วยprint -l $array_of_linesซึ่งฉันเชื่อว่ามันจะพิมพ์องค์ประกอบของอาเรย์ทีละบรรทัด ฉันได้ตรวจสอบสิ่งนี้ด้วย: echo $array_of_lines[1] echo $array_of_lines[2] ... ในความพยายามครั้งที่สองฉันคิดว่าการเพิ่มevalจะช่วยได้: IFS='\n' array_of_lines=$(eval my_command); แต่ฉันได้ผลลัพธ์เหมือนกันทุกประการ ในที่สุดต่อไปนี้คำตอบเกี่ยวกับองค์ประกอบของรายการที่มีช่องว่างใน zshฉันยังได้ลองใช้การตั้งค่าสถานะการขยายพารามิเตอร์แทนที่จะIFSบอก zsh วิธีการแยกอินพุตและรวบรวมองค์ประกอบเป็นอาร์เรย์เช่น: array_of_lines=("${(@f)$(my_command)}"); แต่ฉันยังคงได้รับผลลัพธ์เดียวกัน (แยกเกิดขึ้นn) ด้วยสิ่งนี้ฉันมีคำถามต่อไปนี้: ไตรมาสที่ 1 อะไรคือ"วิธีการที่เหมาะสม"ในการรวบรวมเอาต์พุตของคำสั่งในอาร์เรย์ของบรรทัด? ไตรมาสที่ 2 ฉันIFSจะระบุให้แยกบรรทัดใหม่ได้อย่างไร ไตรมาสที่ 3 หากฉันใช้การตั้งค่าสถานะการขยายพารามิเตอร์เช่นเดียวกับในความพยายามครั้งที่สามของฉันข้างต้น (เช่นการใช้@f) เพื่อระบุการแยก zsh จะละเว้นค่าเป็นIFSหรือไม่? ทำไมมันไม่ทำงานด้านบน
42 shell-script  zsh 

1
เป็นไปได้หรือไม่ที่จะมีการผูกคีย์กลุ่มในเทอร์มินัล
ฉันคุ้นเคยกับการผูกข้อความ (เช่นกด w เพื่อไปยังคำ, dw เพื่อลบคำและอื่น ๆ ) และมันเป็นโหมด (แทรก, ปกติ, ภาพ) และจากความอยากรู้อยากเห็น: มีบางอย่าง การใช้งานลักษณะการทำงานของโหมดและการเชื่อมโยงจากกลุ่มไปยังเทอร์มินัลของฉันเป็นอย่างไร มีโหมดแทรกโหมดปกติและเช่น ...
42 bash  shell  terminal  vim  zsh 

4
ประวัติไม่ จำกัด ใน zsh
ในzshฉันต้องการมีประวัติไม่ จำกัด ฉันตั้งHISTSIZE=ซึ่งใช้งานbashได้ ตอนนี้ฉันนำเข้าประวัติเก่า mv old_history .history ซึ่งค่อนข้างใหญ่ wc -l .history 43562 .history ถ้าฉันปิดแล้วเริ่มzshใหม่อีกครั้งฉันจะเห็น wc -l .history 32234 .history ฉันมีประวัติไม่ จำกัด ได้zshหรือไม่?

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