【问题标题】:executing parameter file in a unix remote server在 Unix 远程服务器中执行参数文件
【发布时间】:2015-09-17 23:42:00
【问题描述】:

我正在尝试使用 ssh 远程运行脚本,并且需要使用来自远程服务器的一些参数。将所有参数保存在远程服务器位置 temp/test/test.prm 文件中。收到错误消息“invoke.sh: line 20: ./temp/test/test.prm: No such file or directory”

请参阅下面的示例脚本。对脚本有非常基本的了解,所以请指导我

#!/bin/sh
Param1=$1
Param2=$2

ssh usr@Server1

          . ${Param1}/Client/scripts/Sample1.prm

 cd  $prmHome/$prmSetPath

 ls | sed '/\.log$/d' >  $prmHome/$prmScript/Filelist.txt

 cd $prmHome/$prmScript

 while read LINE

 do

 ExportFilName=$LINE

 ./conversion.sh $prmHome/tmp_export/convert_$Param2.csv  $prmHome/$prmSetPath/'$ExportFilName'

 done < Filelist.txt


rm -rf   $prmHome/$prmScript/Filelist.txt

exit 0



Content of  Sample1.prm
prmHome=/iis/home
prmSetPath=/export/set
PrmScript=/Client/scripts

在使用 ssh 连接到远程服务器后,我尝试了相同的槽命令行并且它正在工作,但是当我尝试通过脚本 (invoke.sh) 执行相同操作时,它不会抛出此类文件或目录错误

【问题讨论】:

  • 看起来您正在尝试 source 您的参数文件。但为什么?是shell脚本还是什么?
  • 或者只是一个一般性问题,您打算在远程主机上运行代码的哪一部分?

标签: linux unix ssh


【解决方案1】:

更新

这不清楚,不会起作用!

ssh usr@Server1
          . ${Param1}/Client/scripts/Sample1.prm

如前所述,您应该使用

ssh usr@Server1 ". ${Param1}/Client/scripts/Sample1.prm" 

先格式化。

其次,您期望以下命令做什么?

. ${Param1}/Client/scripts/Sample1.prm

注意. 和路径之间有一个空格,路径是source 的同义词。所以还要检查Sample1.prm是否有有效的命令。


看起来您没有在远程主机上运行任何 ssh shell 命令,而只是在本地主机上运行。

您究竟是如何运行 ssh shell 命令的?

您示例中的代码 sn-p 格式不正确。 一般结构应如下所示,例如

  • ssh user1@server1 date

    或

  • ssh user1@server1 'df -H'

请修改您的调用脚本,或使问题中的格式适当。

【讨论】:

  • 我需要在远程服务器上运行一个脚本,但是我需要传递一些参数。我正在尝试通过另一个脚本从本地服务器调用相同的脚本。所以想在我的本地脚本中首先使用 ssh 连接到远程服务器(我不确定这是否是正确的方法,第一次做)然后我可以读取远程服务器中存在的参数文件,然后使用来自运行远程脚本的参数文件)。
  • 您问题中的代码与您想做的事情无关。您应该对具有多个命令的参数使用以下结构ssh user1@server1 'df -H'
  • 这绝对不可读。请将代码复制到您的问题中并格式化!
  • 。我的意图是 ' 。 ${Param1}/Client/scripts/Sample1.prm ' 这个命令是为了执行这个文件,这样我就可以使用 Sample1.prm 文件中提到的参数了。并且这一行之后的所有代码(我的期望是)都应该在远程服务器上执行
  • 如果您也打算运行其他行,那么最好的办法是创建一个脚本,其中包含您要在每个远程主机上运行的内容。将脚本复制到每个远程主机,然后通过 ssh shell 命令执行。
【解决方案2】:

更新:

如果您想通过 ssh 在远程服务器上执行您的代码,您可以执行以下操作:

  1. 为您要远程运行的代码创建单独的文件my_script.sh,然后粘贴以下代码:

     #!/bin/bash
     function my_function() {
        prmHome=$1
        prmSetPath=$2
        PrmScript=$3
    
        cd  $prmHome/$prmSetPath
    
         ls | sed '/\.log$/d' >  $prmHome/$prmScript/Filelist.txt
    
         cd $prmHome/$prmScript
    
         while read LINE
    
         do
    
         ExportFilName=$LINE
    
         ./conversion.sh $prmHome/tmp_export/convert_$Param2.csv  $prmHome/$prmSetPath/'$ExportFilName'
    
         done < Filelist.txt  
         rm -rf   $prmHome/$prmScript/Filelist.txt  
    
        exit 0 
      }
    
  2. 然后您可以通过在远程服务器上获取您的文件来远程调用您的函数:

    ssh usr@Server1 '. my_script.sh; my_function "/iis/home" "/export/set" "/Client/scripts"'

就是这样:)


此代码不起作用:

ssh usr@Server1

          . ${Param1}/Client/scripts/Sample1.prm

这样改:

ssh usr@Server1 ". ${Param1}/Client/scripts/Sample1.prm"

【讨论】:

  • 谢谢,但我只想在远程服务器(server1)上执行此行之后提到的所有代码。我该怎么做?
  • @Sham 嗯,好吧,但为什么不把你所有的代码放在单独的文件中,然后通过 ssh 调用它,就像这样:ssh $my_server ". /&lt;somepath&gt;/myscpritp.sh; my_function $param1 $param2"?
  • 你能解释一下吗。放置所有代码意味着(我需要在远程服务器上运行的所有代码?) my_function 是什么意思。由于我发布了代码,因此您可以从中制作出原始帖子。抱歉,关于 ssh all 的想法不多
  • 谢谢塞缪尔。让我试试,然后告诉你
  • 我认为调用函数语法不正确。不执行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
  • 2018-07-17
  • 1970-01-01
相关资源
最近更新 更多