เรียกใช้ zsh โดยให้มันรันคำสั่งจากนั้นเข้าสู่โหมดโต้ตอบแทนการออก


32

ฉันต้องการเริ่ม zsh คล้ายกับ

zsh -c 'my_prog option1 option2'

แต่แทนที่จะออกหลังจากรันคำสั่งนั้นให้ฉันไปที่ propt ของ zsh ที่เรียกใช้ (ไม่ใช่ที่ใดก็ตามที่มันถูกเรียกจาก) กรณีการใช้งานเฉพาะสำหรับกรณีนี้อยู่ในไฟล์ screenrc คุณสามารถทำสิ่งต่อไปนี้:

screen -t my_prog 0 zsh -c 'my_prog opt1 opt2'

และหลังจากรันคำสั่งนั้นคุณจะเหลือเชลล์ไว้แทนที่จะปิด

คำตอบ:


24

ไม่ว่าฉันจะแนะนำให้ทำเช่นนี้

(sirius)~: zsh -c 'print hello; zsh -i'
hello
(sirius)~: echo $SHLVL
2

มีลูกเล่นอื่น ๆ ที่คุณสามารถเล่นกับหน้าจอและใช้$STYตัวแปร

หากคุณต้องการให้บางสิ่งรันจาก zsh ด้วยแต่ละหน้าจอคุณสามารถตรวจสอบตัวแปร $ STY ภายใน. zshrc หรือ. zlogin ของคุณ <PID>.<TTY>.<HOSTNAME>มันมีอยู่ในรูปแบบ

if [[ -n $STY ]] then
  if [[ -f ~/.zsh-$STY[(ws:.:)2] ]] then
    . ~/.zsh-$STY[(ws:.:)2]
  fi
fi

หากในหน้าจอและหาก~/.zsh-<TTY>(จากตัวแปร $ STY) มีอยู่ให้ระบุแหล่งที่มา คุณยังสามารถตั้งค่าตัวแปรสภาพแวดล้อมก่อนที่จะเรียกเชลล์แบบโต้ตอบ

> FOO=bar zsh -i
> env | grep FOO
FOO=bar

> RUNTHISCOMMAND=/path/to/script zsh -i
.zshrc:
if [[ -n $RUNTHISCOMMAND ]] then
   $RUNTHISCOMMAND
fi

เพิ่มการตรวจสอบเหล่านั้นลงใน. zshrc / .zlogin ของคุณ


รุ่งโรจน์สำหรับการสอนฉันเกี่ยวกับ SHLVL
Nicolas Dumazet

ฉันหวังว่าจะหลีกเลี่ยงเชลล์ที่ซ้อนกัน แต่ก็ดี
Autoplectic

14

ผมพบว่าวิธีการแก้ปัญหาที่ใช้งานได้โดยไม่ต้องเปลือกพิเศษที่นี่ เพิ่ม:

if [[ $1 == eval ]]
then
    "$@"
set --
fi

ถึง. zshrc จากนั้นโทร zsh ด้วย

zsh -is eval 'your shell command here'

ยอดเยี่ยมมากสำหรับการเริ่มต้นกระสุนจำนวนมากในครั้งเดียว


6

สิ่งที่เกี่ยวกับการผนวก; exec zshคำสั่ง? ด้วยวิธีนี้มีเพียงหนึ่งกระสุนที่เหลืออยู่ในตอนท้าย


5
จริง ๆ แล้วคุณไม่จำเป็นต้องใช้ผู้บริหารถ้าคุณ; zsh -iทำเช่นนั้นสำหรับคุณ
Darren Hall

4

ผมมีในตอนท้ายของฉันeval "$RUN" .zshrcตอนนี้ฉันสามารถรันคำสั่งโดยไม่มีเชลล์พิเศษด้วย:

RUN='my_prog opt1 opt2' zsh

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