Bash 将带有参数的本地文件传递到远程服务器

问题描述 投票:0回答:1

如何运行文件并将变量传递到本地文件到远程服务器?

当我运行下面的命令时,重定向 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
bash ksh
1个回答
0
投票

试试这个:

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
然后会将其读取为自己的输入。

© www.soinside.com 2019 - 2024. All rights reserved.