我使用這個命令將文件導入到我的服務器:shell腳本動作,如果兩個文件是不同
scp [email protected]:/test/test/test/server.py /test/test/test/test.py~/;
我要重新啓動我的服務器,如果新導入的文件test.py〜從test.py不同已經存在。我將如何使用shellcript來做到這一點?
我使用這個命令將文件導入到我的服務器:shell腳本動作,如果兩個文件是不同
scp [email protected]:/test/test/test/server.py /test/test/test/test.py~/;
我要重新啓動我的服務器,如果新導入的文件test.py〜從test.py不同已經存在。我將如何使用shellcript來做到這一點?
if ! cmp test.py test.py~ >/dev/null 2>&1
then
# restart service
fi
斷裂下來:
cmp test.py test.py~
返回true(0)如果test.py和test.py〜是相同的,否則爲假(1)。你可以在man cmp
看到這個。!
將結果反轉,因此if
語句轉換爲「如果test.py和test.py〜不同」。>/dev/null 2>&1
將cmp
的所有輸出發送到null device,因此您只需得到真/假比較結果,而不會在控制檯上產生任何不必要的噪音。+1,但-q是非標準的。重定向到/ dev/null將始終有效。 –
對不起,有人能解釋bash noob的第一行嗎? if運算符的論點的優先順序是什麼?爲什麼有這兩個重定向,它們是什麼意思? – user1512321
@AndrewSchulman:謝謝,我用了一個腳本。如果我明白了這一點,布爾輸出和stdout都會被髮送到if,所以只需要布爾答案,就必須將stdout發送給位桶。 – user1512321
我會做這樣的事情
[email protected]$ cat /test/test/test/server.py | ssh [email protected] 'cat - > /test/test/test/test.py.new ; cmp /test/test/test/test.py /test/test/test/test.py.new || (mv /test/test/test/test.py.new /test/test/test/test.py ; echo issue restart command here)'
我希望你的意思是「重新啓動我的守護」而不是「重新啓動我的服務器」 – Sorpigal
你可能不希望最後的「/;」在那個命令上,因爲它不是一個目錄,並且在同一行上沒有其他命令。 –
@peter你的意思是如果一個文件的負載不同於一個文件並檢查每個文件?在你的評論中我的答案在下面。 – gadgetmo