I am trying to connect to a server via ssh and then execute a command. So far so simple.

The twist is that on that server, I start zsh from my bash. So in my .bashrc I have the command:

exec /bin/zsh -l

So that when I login, it automatically starts my z-shell. And I want to keep it like that.

Unfortunately, when I run my bash script to connect to the server and run a command, it does not work. No error message, the command just runs endlessly.

Is there a way to do this in in spite of the shell change?


  • 2
    Why do you want to keep running zsh from bash? If you always use zsh it'd make more sense to run chsh to change your login shell. – Panki Feb 28 at 10:32
  • thanks for the tip, however, chsh does not work because we are using ldap and chsh.ldap returns a segmentation fault. I spend ours on trying to get that work lol – cmplx96 Feb 28 at 11:04
  • 1
    All chsh really does (afaik) is edit /etc/passwd, so you might be able to get the same result with root and a text editor. – Panki Feb 28 at 11:48
  • we have a different config, none of the users are in /etc/passwd – cmplx96 Feb 28 at 12:54
  • also, unfortunately, I don't have root rights – cmplx96 Feb 28 at 12:58

I found a solution.

In the .bashrc, check whether or not the shell is in interactive mode. If yes, open z shell.

if [[ $- == *i* ]]
    exec /bin/zsh -l

That way, if you execute a bash script that connects to the server and executes the command, z shell won't be started.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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