如何运行文件并将变量传递到本地文件到远程服务器?
当我运行下面的命令时,重定向 file_in 而不使用 < it does work
这可行,但文件必须位于远程服务器上。/remoteserver/xxxxx.sql
function Runsshlocal
{
HOSTS=$1
SID=$2
file_in=$3
shift 3
SQL_PARAMS=$@
output=$(echo exit | ssh -q ${HOSTS} "ORAENV_ASK=NO;ORACLE_SID=${SID}; . oraenv -s;sqlplus -s \"/ as sysdba \" @${file_in} ${SQL_PARAMS}" )
echo $output
}
TEST=$(Runsshlocal ${TARGET_SERVER} ${TARGET_SID} /remoteserver/xxxxx.sql ${PARAM1} ${PARAM2})
echo $TEST
但是我想在 xxxxx.sql 文件位于本地服务器而不是远程服务器上的地方运行它。
这不起作用
function Runsshlocal
{
HOSTS=$1
SID=$2
file_in=$3
shift 3
SQL_PARAMS=$@
output=$(echo exit | ssh -q ${HOSTS} "ORAENV_ASK=NO;ORACLE_SID=${SID}; . oraenv -s;sqlplus -s \"/ as sysdba \" " < @${file_in} ${SQL_PARAMS} )
echo $output }
TEST=$(Runsshlocal ${TARGET_SERVER} ${TARGET_SID} /localserver/xxxxx.sql ${PARAM1} ${PARAM2})
echo $TEST
试试这个:
output=$(ssh -q ${HOSTS} "ORAENV_ASK=NO;ORACLE_SID=${SID}; . oraenv -s;sqlplus /dev/stdin -s \"/ as sysdba \" " ${SQL_PARAMS} < "$file_in" )
这使用 SQL 文件作为
ssh
的标准输入。 sqlplus
然后会将其读取为自己的输入。