Bash 脚本和 ssh 出错



>我有一个 bash 脚本,我ssh到远程主机,然后根据操作系统创建一个文件(case bash语句)。当我在OS X上执行此代码时,我希望评估值Darwin并创建文件eg2.txt。但是,由于某种原因,评估无法选择达尔文,它选择*,然后创建文件none.txt。有没有人遇到过类似的问题?有人能说出哪里出了问题吗?

#!/bin/bash
ssh -l user $1 "cd Desktop; 
opname=`uname -s`;
echo "first" > first.txt
case "$opname" in 
    "Darwin") echo "Darwin" > eg2.txt ;;
    "Linux") sed -i "/$2/d" choice_list.txt ;;
    *) touch none.txt ;;
esac"

附言我主要在 Mac 上运行此代码。

问题是您的$opname变量正在由运行ssh(即在客户端)的 Bash 实例扩展(到空字符串中),而不是通过 SSH 传递由服务器端的 Bash 实例处理。

要解决此问题,您可以使用单引号而不是双引号:

#!/bin/bash
ssh -l user $1 'cd Desktop; 
opname=`uname -s`;
echo "first" > first.txt
case "$opname" in 
    Darwin) echo "Darwin" > eg2.txt ;;
    Linux) sed -i "/$2/d" choice_list.txt ;;
    *) touch none.txt ;;
esac'

或者您可以使用引用您的$

#!/bin/bash
ssh -l user $1 "cd Desktop; 
opname=`uname -s`;
echo "first" > first.txt
case "$opname" in 
    "Darwin") echo "Darwin" > eg2.txt ;;
    "Linux") sed -i "/$2/d" choice_list.txt ;;
    *) touch none.txt ;;
esac"

相关内容

  • 没有找到相关文章

最新更新