這裏的情況:如何以編程方式驗證CYGWIN應用程序是否安裝在SH腳本中?
我正在寫一個SH部署腳本,它將在CYGWIN中使用RSYNC命令部署一個網站。安裝完成後,我想發送一封電子郵件給開發團隊,說部署已經完成了一些細節。我將使用「exim」從CYGWIN發送郵件。
事情是,exim只在安裝CYGWIN時是可選的,如果沒有安裝,我想退出我的SH腳本。如果應用程序安裝在腳本中,是否有任何想法檢查UNIX(以及在CYGWIN中工作)?
在此先感謝!
這裏的情況:如何以編程方式驗證CYGWIN應用程序是否安裝在SH腳本中?
我正在寫一個SH部署腳本,它將在CYGWIN中使用RSYNC命令部署一個網站。安裝完成後,我想發送一封電子郵件給開發團隊,說部署已經完成了一些細節。我將使用「exim」從CYGWIN發送郵件。
事情是,exim只在安裝CYGWIN時是可選的,如果沒有安裝,我想退出我的SH腳本。如果應用程序安裝在腳本中,是否有任何想法檢查UNIX(以及在CYGWIN中工作)?
在此先感謝!
# bash script (should also work with sh)
# someprog must be on the path for type to find it
if type -p "someprog"
then
echo "it's there"
else
echo "it isn't"
fi
您可以使用'which'命令。 它會返回你的程序的位置或沒有任何東西,如果不存在。
具體而言,以檢查關於 '進出口',上執行
exim -bV
在我的Cygwin它給出了一個輸出等,
Exim version 4.69 #1 built 28-Jan-2008 21:59:08
Copyright (c) University of Cambridge 2006
Probably GDBM (native mode)
Support for: crypteq iconv() PAM OpenSSL Content_Scanning
Lookups: lsearch wildlsearch nwildlsearch iplsearch dbm dbmnz dnsdb dsearch ldap
ldapdn ldapm passwd
Authenticators: cram_md5 plaintext spa
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/maildir/mailstore/mbx autoreply pipe smtp
Size of off_t: 8
Configuration file is /etc/exim.conf
從 '進出口' 手動 '進出口-bV' ,
此選項會導致Exim寫入當前版本號,編譯 數字,以及exim二進制的編譯日期到標準輸出。 它還列出了正在使用的DBM庫,可選模塊 (如特定的查找類型), 二進制文件中包含的驅動程序以及正在使用的運行時配置文件的名稱。
作爲其操作的一部分,-bV會導致Exim讀取並語法檢查其配置文件 。但是,這只是一個靜態檢查。它不能檢查要擴展的值 。例如,儘管檢測到拼寫錯誤的ACL動詞 ,但動詞參數中的錯誤不是。您不能單靠依賴 -bV來發現(例如)配置中的所有拼寫錯誤; 需要一些現實的測試。 -bh和-N選項提供更多 動態測試工具。
與type
和which
檢查比較。
類型是一個shell內建命令。它指示如果用作命令,shell將如何解釋名稱。 -p
選項會導致它返回在命令發出時將執行的磁盤文件的名稱。
其中只需在搜索PATH
中使用相同的bash
算法在給定名稱中搜索可執行文件。
如果有人在路徑中放入一個由相同名稱調用的可執行文件,這兩者中的任何一個都會返回true。如果擔心安全問題,您應該更加小心地從腳本調用命令。
知道你在跑什麼可能是謹慎的。
當然,我也可以實現一個名爲exim
的shell腳本,它將返回上面的輸入-bV
;並在背景中弄亂事情 - 你的偏執狂水平是多少?
爲了減輕安全擔憂NIK長大,你可以檢查可執行文件的位置對位置的預期列表:
case $(type -p someprog) in
/usr/bin/someprog \
| /bin/someprog \
| /usr/local/someprog)
echo "Valid location";;
*)
echo "Invalid location";;
esac
謝謝,這看起來很容易,但最後不知道下面的命令: ) – Amadeus45 2009-07-24 09:31:25