0

我有一个 bash 脚本,我在其中ssh连接到远程主机,然后根据操作系统创建一个文件(casebash 中的语句)。当我在 OS X 上执行此代码时,我希望评估 Darwin 的值并创建文件 eg2.txt。但是,由于某种原因,评估未能选择 Darwin,它选择*然后创建文件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"

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

4

1 回答 1

2

问题是您的$opname变量正在被正在运行的 Bash 实例(即在客户端)扩展(到空字符串中ssh),而不是通过 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'

否则你可以引用你的$using \

#!/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"
于 2012-12-04T14:39:41.717 回答