i'd like to start zsh similar to

zsh -c 'my_prog option1 option2'

but instead of exiting after running that command, leaving me at the propt of the invoked zsh (not wherever it is being called from). one particular use-case for this is in screenrc files, you could do something like:

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

and after running that command you're left with a shell there instead of it closing.

link|improve this question
feedback

3 Answers

up vote 7 down vote accepted

Not that I would advise doing this.

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

There are other tricks you can play with screen and using the $STY variable.

If you want something run from zsh with individual screens, you can check the $STY variable within your .zshrc or .zlogin. It is in the format <PID>.<TTY>.<HOSTNAME>.

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

If in screen, and if ~/.zsh-<TTY> (from the $STY variable) exists, source that, then continue on your merry way. You can also set an environment variable before calling the interactive shell.

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

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

Add those checks into your .zshrc/.zlogin.

link|improve this answer
kudos for teaching me about SHLVL – NicDumZ Jan 6 '10 at 5:00
i was hoping to avoid the nested shell, but oh well. – Autoplectic Jan 6 '10 at 9:24
feedback

What about appending ; exec zsh to the command? That way there's only one shell left at the end.

link|improve this answer
2  
You actually don't need the exec if you ; zsh -i, it does that for you already. – Darren Hall Jan 6 '10 at 17:47
feedback

I found a solution that works without an extra shell here. Add:

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

to .zshrc, then call zsh with

zsh -is eval 'your shell command here'

Really great for starting up lots of shells at once.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.