2016-04-19 152 views
1

私はシェルスクリプトを持っています。これは基本的に1つの環境で実行され、別の環境にディレクトリが存在するかどうかをチェックする必要があります。シェルスクリプトでsshpassを使ってディレクトリが存在するかどうかをチェックする方法は?

私は以下の2つの方法で試しましたが、運はありませんでした。

ウェイ1:

if [ -d "sshpass -p PASSWORD ssh [email protected] /home/test" ]; then 
echo "YES" 
fi 

ウェイ2:

if [sshpass -p PASSWORD ssh [email protected] '[ -d /home/test ]']; then 
echo "YES" 
fi 

答えて

1

if試験で角括弧はif構文の一部ではありません。 [はそれ自身のコマンドです(testとも呼ばれます)。

if文の構文は、大まか(あなたが本当に好奇心であれば多くのためのShell Grammar Rulesを参照)さ:-dは、ディレクトリ名ではない文字列がかかるため

if <command that returns true or false>; then 
    <other commands> 
fi 

あなたの最初の試みは、単に間違っていますこれは実行したいコマンドです。

2番目の試みは近いうちに角括弧が多すぎます(角括弧のスペースが不足しています)。

sshpassを仮定すると、適切sshコマンドの戻り値を返す処理)第二の試行から外側の四角ブラケットを取り外し、それが動作する:

if sshpass -p PASSWORD ssh [email protected] '[ -d /home/test ]'; then 
    echo "YES" 
fi 
0

sshpassはほとんど使用されています。たぶん

ssh使用バッチモードと同じあなたはその後、a.out

で結果を収集します

sshpass -p PASSWORD ssh -o BatchMode=yes [email protected] "if [ -d /home/test ] ; then echo Y ; fi" > a.out 

の作品