>我有一个 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"