Hi Phil, Thanks for the info. Your response really helps. I am sorry for the limited information I provided. The zsh was started from bashrc file because I have no root permission in the server. With your help, I solved the problem by checking for 'i' in '$-'. Thank you so much. Best, Rui Phil Pennock 于2020年8月12日周三 上午11:55写道: > On 2020-08-12 at 01:25, Rui Dong wrote: > > I am a fan of zsh, and used it for many years. Recently I found when I > > configure the server with zsh, I could not mount the disk with sshfs. If > I > > comment the "exec /bin/zsh --login" out, sshfs works again. Could you > > please help with this? > > It sounds like you're trying to change your shell in user configuration > files without changing the login user's shell in the system records. > And then you're doing this in a configuration file used for all logins, > even non-interactive ones. > > So when some other command tries to log in, your shell switch is > happening and discarding the actual commands to be run. > > You probably want to use the `chsh` command to change the shell instead. > Or `vipw` or whatever else changes the shell in the `/etc/passwd` file: > the last field on the line for your user specifies the shell. > > If you _have_ to use configuration files, then make sure that you only > change shells, or run any command which produces output to stdout or > stderr, if the shell is interactive. > > How you do that depends upon the shell which is being used, and which > configuration file you edit. Check the manual-page for guidance on > which file to be edited. > > If one configuration file is used for both interactive and > non-interactive use, and there's no other file you can use, then you can > use conditional logic to wrap around the exec and only call that when > interactive. The syntax depends upon the shell (csh, bash, whatever). > There are two traditional approaches for "what to test": > > 1. You can look at $PS1, as long as nothing is polluting the environment > by exporting it: PS1 will only be set by shells when the shell is > interactive, because this is the main variable used to define what > your command prompt looks like. But sloppy practices (exporting PS1) > will ruin this. > 2. The shell might have a variable which lists which options are in > effect, and you can check for the interactive option in that. For > instance, with the bash shell, you might check for `i` in `$-`: > > if [[ $- == *i* ]]; then > exec /bin/zsh --login > fi > > More than that, we can't help you with, as there are too few details in > your mail about your setup. > > Regards, > -Phil > -- Rui Dong Postdoctoral Fellow, Guo-Cheng Yuan's lab Department of Pediatric Oncology Dana-Farber Cancer Institute 360 Longwood Ave, Boston, MA, 02215