我使用的是KSH
腳本來執行一個二進制文件(程序)具有以下語法正確執行:用戶定義輸出重定向無法正常運行
myprog [-v | --verbose (optional)] [input1] [input2]
該程序打印什麼&成功時返回退出代碼0(零)。在失敗時,它將打印ERROR消息至STDERR
&返回exit status > 0
。如果指定了-v
選項,則會在成功和失敗的情況下將詳細的詳細信息打印到STDOUT
。
爲了使其可用並減少參數交換和用戶控制日誌的機會,我使用了一個ksh shell腳本來調用這個二進制文件。運行KSH外殼腳本的語法:
- myshell.sh [-v(可選)] [-a INPUT1] [-b輸入2]
如果指定-v
選項,KSH重定向STDOUT
至<execution_date_time>_out.log
和STDERR
至<execution_date_time>_err.log
。我的ksh腳本如下:
myshell.sh:
#! /bun/ksh
verbopt=""
log=""
arg1=""
arg2=""
dateTime=`date +%y-%m-%d_%H:%M:%S`
while getopts "va:b:" arg
do
case $arg in
v) # verbose output
verbopt="-v"
log="1>${dateTime}_out.log 2>${dateTime}_err.log"
;;
a) # Input 1
arg1=$OPTARG
;;
b) # Input 2
arg2=$OPTARG
;;
*) # usage
echo "USAGE: myshell.sh [-v] [-a input1] [-b input2]"
exit 2
;;
esac
done
if [[ -z $arg1|| -z $arg2]]
then
echo "Missing arguments"
exit 2
fi
myprog $verbopt $arg1 $arg2 $log
exit $?
這裏的問題是,所有的輸出STDERR
& STDOUT
印在屏幕上(即沒有重定向發生),以及無*.log
文件是在成功執行或不成功執行後創建的(即退出狀態分別爲0或> 0)。
任何人都可以幫我解決這個問題嗎? 謝謝。
強烈建議不要使用'eval'。特別是用戶提供的字符串。這不是完成目標的安全方法。 –
我的第一篇文章是一個簡單的例子,介紹如何使用eval。 OP仍然可以在腳本中使用'eval',因爲他實際上並沒有讓用戶提供任何潛在的惡意命令;我已更新該帖子以提供一個不顯示運行任何用戶提供的字符串的示例;現在開心? :-) – markp