这个问题出现了很久,后来发现是由于我使用的默认 login shell 为 zsh 导致的。
只要用
chsh -s /bin/bash
将默认的 login shell 改为 bash 即可。
但是我又不想从 zsh 切换回 bash,于是在 .bashrc 的最后添加如下两句:
vt=$(fgconsole 2>/dev/null)
(( vt != 1 )) && exec zsh
之所以这样写是因为我的 console 1 被设置为自动启用 startx,如果不判断一下, .xinitrc 里的 exec awesome 语句就无法起效(被覆盖)。
实际原因是因为服务器端为了使用在本地编译的 zsh,我没有使用 chsh 命令修改默认 shell,而是在 .bashrc 的最后加上了:
exec zsh
导致 sftp 等程序无法执行。