zsh를 호출하여 명령을 실행 한 다음 종료하는 대신 대화식 모드로 들어가십시오.


32

zsh와 비슷한 것을 시작하고 싶습니다.

zsh -c 'my_prog option1 option2'

그러나 해당 명령을 실행 한 후 종료하는 대신 호출 된 zsh의 propt (나를 호출하지 않는 곳)에 남겨 두십시오. 이에 대한 하나의 특정 사용 사례는 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에서 무언가를 실행하려면 .zshrc 또는 .zlogin 내에서 $ STY 변수를 확인할 수 있습니다. 형식 <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 -is eval 'your shell command here'

한 번에 많은 쉘을 시작하는 데 정말 좋습니다.


6

; exec zsh명령 에 추가 하는 것은 어떻습니까? 그렇게하면 끝에 하나의 껍질 만 남게됩니다.


5
실제로 exec가 필요하지 않으면 ; zsh -i이미 그렇게합니다.
Darren Hall

4

나는 eval "$RUN"나의 끝에있다 .zshrc. 이제 추가 쉘없이 명령을 실행할 수 있습니다.

RUN='my_prog opt1 opt2' zsh

이것은 이상한 kludge처럼 보이지만 잘 작동합니다!
zaTricky
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.