2012-12-04 103 views
0

我有一个bash脚本,其中我将ssh添加到远程主机,然后根据操作系统(在bash中的case语句)创建一个文件。当我在OS X上执行此代码时,我期望评估Darwin值并创建文件eg2.txt。但是,由于某些原因,评估未能选择达尔文并且它选择*,然后创建文件none.txt。有没有人遇到类似的问题?有人能说出什么是错的吗?Bash脚本和ssh的错误

#!/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" 

P.S.我主要在Mac上运行此代码。

回答

2

问题是您的$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" 
+0

感谢它的工作原理 – joque

+0

@joque : 别客气! – ruakh