#! /bin/bash
read -p 'Username: ' user
read -p 'IP: ' ip
ssh "$user"@"$ip"
osascript -e ' tell app "System Events" to display "Hello world"'
此文件将自动运行,因此我不需要运行一个又一个命令
它没有运行最后一个命令,我不知道为什么
这是 Mac 上的终端
答案1
我不知道 ssh 究竟是如何运作的,但您的脚本是这样编写的:它会等到 ssh 命令最终终止。然后它会继续并运行您的最后一行 (osascript...)。为了避免等待 ssh 返回,请&
在 ssh 行末尾写入 a。它将让解释器继续在并行线程中执行下一个命令。
答案2
你最后的命令,
osascript -e ' tell app "System Events" to display "Hello world"'
仅当您退出远程 ssh 终端时才会执行。这样您就无法实现您想要做的事情。
希望有期望脚本。您可以使用以下脚本,
#!/bin/sh
expect <<'END'
set timeout 10
set login "your_username"
set addr "remote_ip"
set pw "your_password" # skip this line if you have password less login
spawn ssh $login@$addr
expect "$login@$addr's password:" # skip this line if you have password less login
send -- "$pw\r" # skip this line if you have password less login
expect "~" # use your prompt here, I have ~, replace ~ with your prompt
send -- "ls\r" # replace ls with your command
expect "~"
send -- "exit\r"
expect eof
END