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

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

2
scp wildcard ไม่ทำงานใน zsh
ฉันเปลี่ยนไปใช้ zsh แล้วและก็ใช้งานได้ดี สิ่งหนึ่งที่แปลกประหลาดเมื่อฉันพยายาม scp ด้วย * wildcard มันใช้งานไม่ได้และฉันต้องไปทุบตี คำสั่งที่สองด้านล่างใช้งานได้ดี ความคิดเห็นใด ๆ เกี่ยวกับสาเหตุที่เป็นเช่นนี้และจะแก้ไขได้อย่างไร ~/dmp ⌚ 16:06:10 $ scp abc@123:/home/se/exports/201405091107/* . zsh: no matches found: root@uf3:/home/se/exports/201405091107/* ~/dmp ⌚ 16:06:53 $ bash sean@seanlaptop:~/dmp$ scp abc@123:/home/se/exports/201405091107/* .
17 zsh  wildcards 

4
ประวัติจะไม่ถูกสงวนไว้ใน zsh
เมื่อใดก็ตามที่ฉันเปิดอินสแตนซ์ใหม่ของเทอร์มินัลประวัติศาสตร์จะว่างเปล่า ทำไมถึงเป็นอย่างนั้น? ฉันจำเป็นต้องตั้งค่าบางอย่างหรือไม่? ในทุบตีไม่จำเป็นสำหรับสิ่งนี้แม้ว่า

4
เรียกใช้เชลล์ย่อยจากตรงกลางของคำสั่งปัจจุบัน
ฉันพบตัวเองบ่อยครั้งในสถานการณ์นี้ ฉันกำลังพิมพ์คำสั่งและฉันต้องตรวจสอบอย่างอื่นก่อนที่จะทำให้เสร็จ มีวิธีการเปิด subshell บางอย่างของการป้อนข้อมูลปัจจุบันของฉันจนถูกจำได้แล้วเมื่อฉันออกจาก subshell นี้ฉันกลับไปที่ที่ฉันเคย? $ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL> $ date ... $ exit $ mylongcommand -n -e <BACK TO WHERE I WAS> ฉันกำลังใช้ zsh
16 command-line  zsh 

1
อะไรคือความมหัศจรรย์ที่ทำให้ฉันสามารถรีโมตไฟล์แบบแท็บขณะที่ฉันพิมพ์คำสั่ง scp
สันนิษฐานว่านี่เป็นคุณสมบัติที่มีให้โดยปลั๊กอินบางตัวที่ฉันเปิดใช้งานในการตั้งค่า oh-my-zsh ของฉัน (ฉันใช้ zsh มาหลายปีแล้ว) ฉันสังเกตเห็นตั้งแต่ฉันเพิ่มพับลิกคีย์ของฉันไปยังเซิร์ฟเวอร์ (ตอนนี้ฉันสามารถ SSH ไปยังเซิร์ฟเวอร์โดยไม่ต้องป้อนรหัสผ่าน) เมื่อฉันเขียนscpคำสั่งในเชลล์ของฉันฉันสามารถพา ธ ไฟล์รีโมตแบบแท็บได้จริง ๆ ! เช่น $ diff <(scp Remoteuser@remote.domain.net:/var/www/html/ ฉันกดแท็บแล้วใช้งานได้! (สำหรับสิ่งที่ฉันพยายามทำให้สำเร็จด้วยคำสั่งเองฉันจะใช้scpเพื่อ "คัดลอก" ไปยัง stdout และให้อาหารเป็นไฟล์ต่าง ๆ ด้วยวิธีนี้ฉันสามารถเห็นการเปลี่ยนแปลงที่แน่นอนที่ฉันปรับใช้กับเซิร์ฟเวอร์ก่อน วิ่งrsync) ฉันอยากรู้ว่าชิ้นส่วนใดที่ทำให้งานนี้เป็นอย่างดี มันเป็นสิ่งที่สร้างไว้ใน scp ที่รวมเข้ากับ z shell หรือไม่? หรืออย่างอื่น?

6
วิธีพิมพ์ชื่อไฟล์ต่าง ๆ ด้วยการกดปุ่มน้อยลง
หากฉันต้องการแปลง a pdfเป็นpngภาพด้วย imagemagick ฉันทำสิ่งที่ชอบ: convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf this_is_a_very_long_filename_of_my_pdf_file.png ไฟล์ pdf มักจะมีชื่อไฟล์ที่ยาวมากด้วยเหตุผลบางอย่างและฉันต้องการpngไฟล์ที่มีชื่อเดียวกันยกเว้นนามสกุล ฉันมักจะเลือกthis_is_a_very_long_filename_of_my_pdf_file.pdfสองครั้งผ่านทางแท็บzsh-menuและเปลี่ยนแล้วpdfจะpngด้วยตนเองสำหรับอาร์กิวเมนต์ที่สอง อย่างไรก็ตามมีวิธีที่เร็วกว่าในการทำเช่นนี้?

5
คุณ“ ปิดการใช้งาน” oh-my-zsh (และ zsh) โดยไม่ถอนการติดตั้งได้อย่างไร?
ฉันกำลังลองสภาพแวดล้อม dev ใหม่ ๆ รวมถึง zsh และ oh-my-zsh ตอนนี้ฉันได้ติดตั้ง oh-my-zsh แล้วมันเริ่มต้นตามค่าเริ่มต้นที่เทอร์มินัลของฉัน (iTerm2 และเทอร์มินัล) เริ่มต้นด้วย zsh เสมอและด้วยการตั้งค่าจาก oh-my-zsh ฉันสงสัยว่ามันเป็นไปได้ที่จะ "ปิดการใช้งาน" หรือหยุดใช้ zsh และการตั้งค่าด้วย oh-my-zsh โดยไม่ต้องถอนการติดตั้ง oh-my-zsh? นอกจากนี้ยังเป็นการดีที่จะทราบวิธีการเปิดใช้งานผลิตภัณฑ์เหล่านั้นด้วย ปัจจุบันเทอร์มินัลของฉันไปที่ zsh โดยอัตโนมัติ (ฉันคิดว่า) และใช้ oh-my-zsh โดยอัตโนมัติ ฉันต้องการควบคุมมากกว่านั้นและฉันสามารถควบคุมทั้งสองได้เมื่อใช้ zsh และเมื่อใช้คุณสมบัติ oh-my-zsh สิ่งหนึ่งที่ฉันสนใจในการรู้ก็คือแอปพลิเคชันเทอร์มินัลรู้ได้อย่างไรว่าเชลล์ใดที่จะเริ่มทำงานเมื่อเริ่มต้น นั่นจะเป็นการดีที่สามารถควบคุมได้เช่นกัน! หากคุณอธิบายให้มากที่สุดเท่าที่จะทำได้ใน "ทำไม" ของทุกคำสั่งที่คุณให้ฉันนั่นจะเป็นประโยชน์! :) ฉันใช้งานบน OS X ไม่แน่ใจว่ามีความสำคัญหรือไม่ แต่ฉันมักจะชอบคำตอบที่มากกว่าสำหรับสภาพแวดล้อม Unix ทั่วไปมากกว่าสำหรับฉัน
16 zsh  oh-my-zsh 

4
เปลี่ยนแบบอักษรในคำสั่ง echo
เป็นไปได้หรือไม่ที่จะเปลี่ยนคุณลักษณะแบบอักษรของเอาต์พุตของ echo ใน zsh หรือ bash? สิ่งที่ฉันต้องการเป็นสิ่งที่คล้ายกับ: echo -n "This is the font: normal " echo -n $font=italic "italic," echo -n $font=bold "bold," echo -n "and" echo -n $font=small "small". เพื่อที่จะพิมพ์: "นี่คือตัวอักษร: ปกติ, ตัวเอียง , ตัวหนา , ขนาดเล็ก " ในบรรทัดของข้อความ
16 bash  shell  zsh  fonts 

4
การเพิ่มเส้นทางไปยัง PATH โดยใช้ไวยากรณ์หลายบรรทัด
เท่าที่ฉันเข้าใจวิธีปกติในการเพิ่มพา ธ ไปยังPATHตัวแปรสภาพแวดล้อมคือการเชื่อมโยงพา ธ ที่คั่นด้วย:อักขระ ตัวอย่างเช่นถ้าผมต้องการที่จะเพิ่มอีกสามเส้นทางไป/my/path/1, /my/path/2และ/my/path/3ผมจะต้องทำดังนี้ PATH=$PATH:/my/path/1:/my/path/2:/my/path/3 ซึ่งอ่านไม่ง่าย มีวิธีการกำหนดหรือเพิ่มเส้นทางไปยังPATHตัวแปรโดยใช้ไวยากรณ์หลายบรรทัดหรือไม่? อาจจะใช้อาร์เรย์? ฉันกำลังมองหาสิ่งนี้: PATH = $PATH /my/path/1 /my/path/2 /my/path/3 ในกรณีที่มีวิธีแก้ปัญหาที่น่าสนใจที่เฉพาะเจาะจงของเชลล์ฉันกำลังมองหาวิธีแก้ปัญหาใน zsh

3
การแยกคำคืออะไร เหตุใดการเขียนโปรแกรมเชลล์จึงมีความสำคัญ
zshฉันได้รับสับสนเกี่ยวกับคำบทบาทแยกเล่นใน ฉันไม่ได้สัมผัสกับแนวคิดนี้เมื่อการเขียนโปรแกรมใน C, Python หรือ MATLAB และสิ่งนี้ได้กระตุ้นความสนใจของฉันว่าทำไมการแยกคำดูเหมือนจะเป็นสิ่งที่เฉพาะเจาะจงสำหรับการเขียนโปรแกรมเชลล์ ฉันได้อ่านเกี่ยวกับการแยกคำในเว็บไซต์นี้และเว็บไซต์อื่น ๆ มาก่อน แต่ไม่พบคำอธิบายที่ชัดเจนเกี่ยวกับแนวคิด Wikipedia มีคำจำกัดความของการแยกคำแต่ดูเหมือนจะไม่มีการอ้างอิงถึงวิธีการนำไปใช้กับ Unix shells นี่คือตัวอย่างของความสับสนของฉันในzsh: ในคำถามที่พบบ่อยของZ Shellฉันอ่านต่อไปนี้: 3.1: ทำไมไม่$varที่var="foo bar"ไม่ได้ทำในสิ่งที่ผมคาดหวัง? ในอนุพันธ์บอร์นเชลล์ส่วนใหญ่ตัวแปรหลายคำเช่น var="foo bar" แบ่งออกเป็นคำต่าง ๆ เมื่อส่งผ่านไปยังคำสั่งหรือใช้ในการfor foo in $varวนซ้ำ โดยค่าเริ่มต้น zsh ไม่ได้มีพฤติกรรมที่: ตัวแปรยังคงเหมือนเดิม (นี่ไม่ใช่ข้อผิดพลาด! ดูด้านล่าง) มีตัวเลือกSH_WORD_SPLITให้ใช้งานร่วมกันได้ อย่างไรก็ตามในคู่มือ Z Shellฉันอ่านต่อไปนี้: SH_WORD_SPLIT (-y) <K> <S> ทำให้การแยกฟิลด์ดำเนินการกับการขยายพารามิเตอร์ที่ไม่ได้ระบุไว้ โปรดทราบว่าตัวเลือกนี้ไม่มีส่วนเกี่ยวข้อง กับการแยกคำ (ดูการขยายพารามิเตอร์) ทำไมมันไม่บอกว่าSH_WORD_SPLITมีอะไรจะทำอย่างไรกับการแยกคำ? การแยกคำไม่ใช่สิ่งที่ถูกต้องหรือไม่
16 shell  zsh 

1
pushd, popd vs cd, cd- in bash และ zsh
มีความแตกต่างระหว่างพฤติกรรมของ pushd / popd ใน bash vs zsh หรือไม่? ดูเหมือนว่าใน zsh cd, cd- ทำงานเหมือนกับ pushd / popd (ซึ่งจะเพิ่ม / pops directory โดยอัตโนมัติเมื่อ cd) ในขณะที่ bash cd ไม่มีผลต่อ dir stack หากใครบางคนสามารถให้ฉันตัวชี้ที่จะดี
16 bash  zsh  cd-command  pushd 

1
ความแตกต่างระหว่างสิ่งที่และที่ไหน
ความแตกต่างระหว่างคำสั่งwhereและwhichคำสั่งเชลล์คืออะไร? นี่คือตัวอย่างบางส่วน ~ where cc /usr/bin/cc /usr/bin/cc ~ which cc /usr/bin/cc และ ~ which which which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' /usr/bin/which ~ which where /usr/bin/which: no where in (/usr/local/bin:/bin:/usr/bin:/home/bnikhil/bin:/bin) ด้วย ~ where which which: aliased to alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde which: shell built-in command /usr/bin/which …

1
การดำเนินการสคริปต์ใน zsh - สิทธิ์ของไฟล์
ฉันสับสนเกี่ยวกับการอนุญาตให้ใช้ไฟล์ไม่ทำงานตามที่คาดไว้ อาจเป็นเพราะความคาดหวังของฉันผิด อย่างไรก็ตาม: ฉันมีไฟล์สคริปต์สำหรับความเรียบง่ายที่เรียกว่าเพียงแค่ตั้งอยู่ในs ~/binเพื่อประโยชน์ของตัวอย่างนี้ไฟล์มีเพียงบรรทัดต่อไปนี้: #!/bin/zsh echo "Test"; ง่ายมาก. ฉันนำทางไปยัง~/binไดเรกทอรีและchmodสิทธิ์ของแฟ้มของsการ400- คืออ่านอย่างเดียวสำหรับฉันเท่านั้น ไม่มีสิทธิ์ดำเนินการ ดังนั้นฉันจึงพยายามรันสคริปต์โดยป้อนเส้นทางของสิ่งนี้: % ./s zsh: permission denied: ./s จนถึงตอนนี้ดีมาก ไม่สามารถเรียกใช้ไฟล์ได้เนื่องจากการอนุญาตที่ไม่ถูกต้อง การกำหนดสิทธิ์การเข้าถึงให้เกิน500(เรียกใช้การอนุญาตที่ได้รับ) จะทำงานได้ดีเช่นกัน - ด้วยการอนุญาตเหล่านี้ไฟล์จะทำงานได้ดี: % ./s Test ทั้งหมดนี้เป็นไปตามที่คาดไว้ แต่ฉันก็chmodอนุญาตให้ย้อนกลับไปที่400(ดำเนินการอนุญาตอีกครั้ง) ลองsourceใช้ไฟล์และสิ่งนี้เกิดขึ้น: % source s Test แม้ว่าสิทธิ์จะเป็น 400สคริปต์จะดำเนินการ ดังนั้นนี่คือคำถามของฉัน: เหตุใดจึง./sล้มเหลว (เช่นควร) แต่source sดำเนินการตามปกติ สิ่งนี้ไม่ได้เป็นการทำลายวัตถุประสงค์ทั้งหมดของการอนุญาตให้ดำเนินการหรือไม่ ใน400สิทธิ์sh sและzsh sยังทำงาน ฉันแน่ใจว่าฉันกำลังทำหรือเข้าใจบางสิ่งผิดปกติอย่างน่ากลัว สามารถชี้คนออกที่ให้ฉันและอธิบายความแตกต่างระหว่าง./s, source s, …

4
zsh สามารถเข้าถึง stdout ของโปรแกรมที่รันล่าสุดได้หรือไม่
ฉันมักจะใช้findหรือlocateค้นหาเส้นทาง (~) locate foobar.mmpz /home/progo/lmms/projects/foobar.mmpz ขั้นตอนต่อไปคือการเปิดหรือจัดการไฟล์ ในกรณีที่มีความสุขเช่นนี้ฉันสามารถทำสิ่งนี้ได้: (~) ls `!!` ls `locate foobar.mmpz` /home/progo/lmms/projects/foobar.mmpz แต่ไม่มีใครมีความสุขเกินไปเมื่อมีเอาต์พุตจำนวนมากซึ่งบางอันอาจไม่เป็นเส้นทางหรืออย่างอื่น นอกจากนี้คำสั่งที่อาจทำให้สิ้นเปลืองซ้ำแล้วซ้ำอีกนั้นไม่ได้สวยงามเช่นกัน จะมีวิธีใดบ้างที่จะลอง zsh เพื่อเก็บ stdout ไว้ในอาร์เรย์เพื่อจัดการในภายหลัง? ท้ายที่สุดมันเป็นหน้าที่ของเชลล์ในการเปลี่ยนเส้นทางสตรีมไปยังผู้ใช้ ฉันคิดว่ามันสามารถเก็บ N และ N บรรทัดสุดท้ายในตัวแปรเพื่อใช้ในภายหลังได้ทันทีเช่น$?และอื่น ๆ ตกลงดังนั้นนี่คือเย็นสวย: /unix//a/59704/5674 ตอนนี้ฉันกำลังถามเกี่ยวกับความรู้ zsh (และการย้ายรหัสไปยัง zsh) เพื่อจับภาพประเภทนี้หลังจากแต่ละบรรทัดการเรียกใช้
16 terminal  zsh  output 

2
ภายใต้สถานการณ์ใดจะปฏิบัติการที่พบครั้งแรกในเส้นทางไม่ได้ใช้
ฉันมีพฤติกรรมที่แปลกประหลาดกับ zsh (5.4.2_1 ติดตั้งกับ homebrew) บน osx ที่ไม่ได้ใช้งานครั้งแรกของปฏิบัติการในเส้นทาง นี่คือสถานการณ์: echo $PATH ผลตอบแทน: /usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin ชงเป็นทั้ง /usr/local/Cellar/zplug/HEAD-9fdb388/bin และ usr/local/bin/brew นี่คือการยืนยันโดยการทำงานที่ -a ชงซึ่งผลตอบแทน: /usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew /usr/local/bin/brew แต่เมื่อฉันเรียกใช้ที่ชงมันกลับมา: /usr/local/bin/brew และการชงไม่ทำงาน/usr/local/bin/brewมากกว่า/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew สิ่งนี้จะเกิดขึ้นได้อย่างไรเมื่อชงก่อนหน้านี้ในเส้นทาง? ช่วยชื่นชม
15 zsh  path 

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

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