2012-12-04 101 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