0
我想傳遞一個函數內的字符串變量(bteq本身確實工作),但似乎無法讓它工作。我試試這個:傳遞一個字符串變量到一個函數ksh
td_instance="one"
user="usr1"
pass="pass1"
schemaName="schemaA"
tblName="tableA"
query="SEL '>'||COUNT(*) FROM $schemaName.$tblName"
query_td() { bteq .LOGON $td_instance/$user,$pass
DATABASE $schemaName;
.set width 1000;
.set titledashes off;
$1;
.LOGOFF;
.QUIT;
.EXIT
}
echo $(query_td << EOF |grep '^>' |sed -e "s/^>//" EOF "$query")
,並不斷收到此錯誤:
-ksh: .: syntax error: `)' unexpected
我搬到了一堆圍繞compenents,但似乎仍不能得到它work..I不斷收到同樣的錯誤,當我移動的東西,所以不知道這裏有什麼問題,但我知道的東西是...
--------- UPDATE ------------
所以根據下面的評論...我試圖簡化它,使之更容易調試......我已經得到了功能,現在這個...
query_td() {
bteq "$(cat $HOME/.tdlogon) DATABASE $schemaName; .set width 1000; .set titledashes off; $1 .EXIT"
}
query_td $query
但現在看來運行
bteq "$(cat $HOME/.tdlogon)
,但由於某種原因不運行任何超過該部分功能的東西。它啓動bteq程序並登錄,但只是坐在等待命令的bteq ...
什麼程序應該看到'DATABASE','.set','.LOGOFF'等行,因爲shell正在看到它們而不理解它們。我假設'bteq'應該讓他們作爲命令?如果是這樣,你需要實際餵養他們'bteq'。你不能只把它們放在下一行,並且有這樣的工作(當'bteq'運行時它會這樣做,並給你提供一個交互式提示。 – 2014-10-28 13:50:24
是的,bteq將使用那些...所以每個人都需要是一個變量嗎?如果是的話,我該怎麼做「。」?我可以把它全部放在函數的一行中,這樣也可以嗎? – user2061886 2014-10-28 13:57:14
如果'bteq'會從標準輸入中讀取命令,如果它接受一系列命令作爲參數運行,那麼你可以引用這些命令來將它們作爲一個單獨的字符串傳遞,如果這兩個都不是真的,你可能需要用'expect'作爲參數 – 2014-10-28 14:00:28