Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 将字符串变量传递给函数ksh_Unix_Ksh - Fatal编程技术网

Unix 将字符串变量传递给函数ksh

Unix 将字符串变量传递给函数ksh,unix,ksh,Unix,Ksh,我试图在函数中传递字符串变量(bteq本身可以工作),但似乎无法让它工作。我试试这个: 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 $schemaNam

我试图在函数中传递字符串变量(bteq本身可以工作),但似乎无法让它工作。我试试这个:

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")
我已经移动了一堆元素,但似乎仍然无法使其工作..当我移动东西时,我不断地得到相同的错误,所以不确定这里出了什么问题,但我知道有些东西是

---------更新------------

因此,基于下面的评论…我试图简化它,使其更容易调试…我现在有了这个函数

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中等待命令…

以下是我如何使其工作的…将EOF移到语句中…我想这也是你们所指的,对吗

td_query () { bteq << EOF |grep '^>' |sed -e "s/^>//" 
$(cat $HOME/.tdlogon)
    DATABASE $schemaName;
     .set width 1000;
      .set titledashes off;
    $1
.LOGOFF;
.QUIT;
.EXIT
EOF
}
echo "the date is: " $(td_query "SEL '>'||current_date;")

td\u查询(){bteq什么程序应该看到
数据库
.set
.LOGOFF
,等等行,因为shell看到它们而不理解它们。我假设
bteq
应该将它们作为命令获取?如果是这样,您需要实际将它们馈送到
bteq
。您不能将它们放在下一个line并进行该工作(当运行
bteq
并向您显示一个交互式提示时的方式)。是的,bteq将使用这些功能…那么这些功能中的每一个都需要是变量吗?如果是,我将如何执行“.”?我可以把它全部放在函数中的一行吗?如果
bteq
将从标准输入中读取命令,您可以通过管道将命令行传递给它。如果它接受一系列命令作为参数运行,那么您可以引用这些命令作为单个字符串进行传递。如果两者都不正确,您可能需要使用
 expect
.Etan Reisner:我尝试过这个…query|td(){bteq|LOGON$td|u instance/$user,$pass |数据库$schemaName;|设置宽度1000;|设置标题灰关闭;|$1;|注销;|退出;|退出}..但是没有运气…就像上面写的那样对吗?不,那不对。管道的工作方式是相反的。您将数据管道到需要获取数据的程序。因此,您需要
echo.LOGON..“|bteq
或类似的。
td_query () { bteq << EOF |grep '^>' |sed -e "s/^>//" 
$(cat $HOME/.tdlogon)
    DATABASE $schemaName;
     .set width 1000;
      .set titledashes off;
    $1
.LOGOFF;
.QUIT;
.EXIT
EOF
}
echo "the date is: " $(td_query "SEL '>'||current_date;")