2016-04-05 17 views
1

私は、あるサーバから別のサーバにファイルをコピーするシナリオを持っています。既存のscpを確認する必要があり、サンプルのシェルスクリプトを書きましたが、構文が成り立っていませんここでの主な問題は、の出力が変数scpstatに格納され、if文で一致する文字列と比較されます。ここでは、変数の出力がスクリプト外で実行されています。 sh -x scpsamp.shを実行すると、出力に「sh」が追加されていますが、psなしで比較したときにscpstat='scp'と指定したときに、スクリプト実行時に異なる書式が設定されていることがわかります。変数に入力します。それはpsの出力から情報を抽出するために悪名高く難しい文字列比較はシェルスクリプト

#!/bin/sh 
scpstat=`ps -ef | grep scp | egrep -v 'grep|ssh' | awk '{print $8}')` 
if [ "$scpstat" = "scp" ]; 
then 
echo "SCP is in progress" 
else 
echo "No SCP in progress" 
fi 

sh -x output

+0

あなたは 'pdiof scp'を使用することができますし、それはいくつかのプロセスIDを与えた場合、その後に起こっSCP接続があります。 。 –

+3

それは自宅で遊んでいる人のための 'pidof'です。しかしここでも 'pgrep'が便利です。 –

+0

クロスサイト複製:http://serverfault.com/questions/367921/how-to-prevent-ps-reporting-its-own-process – tripleee

答えて

4

助けてください。お使いのシステムがpgrepを持っている場合、それははるかに簡単です:

if pgrep scp >/dev/null 
then 
    echo "SCP is in progress" 
else 
    echo "No SCP in progress" 
fi