![远程安装 ohmyzsh 时 SSH 挂起](https://linux22.com/image/1590347/%E8%BF%9C%E7%A8%8B%E5%AE%89%E8%A3%85%20ohmyzsh%20%E6%97%B6%20SSH%20%E6%8C%82%E8%B5%B7.png)
我正在尝试通过脚本安装 Oh my zsh:
ssh username@host "
sh -c \"\$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)\"
"
但是,安装完成后,它会挂起,命令不会退出。它会等待我的输入,我必须按 CTRL+C 才能结束。我怎样才能让它运行并自行退出?
我在这里找到了一些类似问题的答案,所以我尝试执行这些,但结果几乎相同。
sh -c \"\$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)\" &
sh -c \"\$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)\" 1>&2
答案1
在审查了脚本本身之后,我猜测如果不在脚本最后进行一些小的修改的话这实际上是不可能的。
该行env zsh -l
实际上运行了 zsh,并且这个 zsh 会等待您的输入。我建议分叉此脚本并删除此行。
&
不起作用的原因是由于后台任务未完成(实际env zsh -l
线路)导致 ssh 会话未关闭。
您还可以尝试使用 nohup 运行该脚本,这将断开脚本与实际 ssh 会话的连接。
nohup sh -c \"\$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)\" &
但是这样,它最后仍会生成 zsh,留下一个与任何东西都断开连接的未使用进程。
更新:
解决这个问题的另一种方法可能是sed
删除不需要的命令。结果命令如下:
sh -c \"\$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sed '/env zsh -l/d')\"