.bashrc 别名帮助有关终端错误

.bashrc 别名帮助有关终端错误

我在 .bashrc 文件上有别名,例如;

alias modemreboot="IP=$(/sbin/ip route | awk '/default/ { print $3 }');echo "reboot" | sshpass -p "12345" ssh admin@$IP"

通过命令行重启我的调制解调器。当我输入或复制粘贴到终端时,它可以工作,但作为别名我得到这个错误;

Pseudo-terminal will not be allocated because stdin is not a terminal.
ssh: Could not resolve hostname : Name or service not known

答案1

你的引用搞乱了--正如你通过运行作业所看到的那样set -x

$ alias modemreboot="IP=$(/sbin/ip route | awk '/default/ { print $3 }');echo "reboot" | sshpass -p "12345" ssh admin@$IP"
++ /sbin/ip route
++ awk '/default/ { print $3 }'
+ alias 'modemreboot=IP=via;echo reboot | sshpass -p 12345 ssh admin@via'

尝试一下

alias modemreboot='IP=$(/sbin/ip route | awk "/default/ { print \$3 }");echo "reboot" | sshpass -p "12345" ssh admin@$IP'

(尽管 - 除非你的/sbin/ip与我的不同 - 我认为你可能想要\$4而不是\$3)。

您可能需要考虑使用 shell 函数,例如

modemreboot () {
  local IP;
  IP=$(/sbin/ip route | awk '/default/ { print $3 }')
  echo "reboot" | sshpass -p "12345" ssh admin@$IP
}

相关内容