2016-04-05 24 views
1

Bir sunucudan diğerine dosya kopyalamak için bir senaryo var, çünkü varolan bir scp'nin devam ettiğini kontrol etmem gerekiyor, örnek bir kabuk komut dosyası yazdım ama sözdizimine rağmen koşul karşılanmıyor doğru, buradaki temel sorun ps komutunun çıkışı scpstat değişkeninde saklanacaktır ve if deyimindeki eşleşen dizgiye göre aynıdır, burada değişkenin çıktısını alıyorum komut dosyasının dışında yürütmekten farklıdır. sh -x scpsamp.sh'u çalıştırırken betiğin farklı şekilde biçimlendirildiğini görebiliyorsunuz, neden "sh" çıktısına ekleniyor, ancak ps olmadan karşılaştırılırken ve scpstat='scp' olarak atanırken ben durumu doğru olarak alabiliyorum, çıktı alırken yanlış bir şey yapıyorum değişkene. Bu ps çıkışından gelen bilgileri ayıklamak için herkesin bildiği gibi zordize karşılaştırması kabuk betiğidir

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

Eğer scp' pdiof 'kullanabilir ve bazı işlem kimliği verirse o zaman oluyor scp bağlantı yoktur: Sisteminiz pgrep varsa, o çok daha kolaydır. . –

+3

Bu, evde oynarken olanlar için "pidof". Ama ayrıca 'pgrep' burada yararlıdır. –

+0

Siteler arası kopya: http://serverfault.com/questions/367921/how-to-prevent-ps-reporting-its-own-process – tripleee

cevap

4

yardım edin.

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