0

sshリモートホストに接続し、オペレーティングシステムに応じてファイルを作成するbashスクリプトがあります( 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

問題は、サーバー側の Bash インスタンスによって処理されるように SSH 経由で渡されるのではなく、$opname実行中の (クライアント側の) 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'

$または、次を使用して引用できます\

#!/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 に答える