Bash 在unix服务器上声明变量

Bash 在unix服务器上声明变量,bash,shell,unix,ssh,scripting,Bash,Shell,Unix,Ssh,Scripting,我正在尝试登录其中一台远程服务器(Box1),并尝试读取远程服务器(Box1)上的一个文件。 其中包含另一台服务器(Box2)的详细信息,基于这些详细信息,我必须返回本地服务器并使用ssh连接到另一台服务器(Box2)进行数据处理。等等 ssh box1.com << EOF if [[ ! -f /home/rakesh/tomar.log ]] then echo "LOG file not found" else echo "

我正在尝试登录其中一台远程服务器(Box1),并尝试读取远程服务器(Box1)上的一个文件。 其中包含另一台服务器(Box2)的详细信息,基于这些详细信息,我必须返回本地服务器并使用ssh连接到另一台服务器(Box2)进行数据处理。等等

    ssh box1.com  << EOF
    if [[ ! -f /home/rakesh/tomar.log ]]
    then
    echo "LOG file not found"
    else
    echo " LOG file present"
    export server_node1= `cat /home/rakesh/tomar.log`
    fi
    EOF

    ssh box2.com << EOF
    if [[ ! -f /home/rakesh/tomar.log ]]
    then
    echo "LOG file not found"
    else
    echo " LOG file present"
    export server_node2= `cat /home/rakesh/tomar.log`
    fi
    EOF 

ssh-box1.com您应该使用
scp
box1
box2
取回文件:

scp box1.com:/home/rt9419/tomar.log ~/tomar1.log
#then you can cat!
export server_node1=`cat ~/tomar1.log`
使用
box2

scp box2.com:/home/rt9419/tomar.log ~/tomar2.log
#then you can cat!
export server_node2=`cat ~/tomar2.log`

有几种可能性。在您的情况下,您可以在远程系统上创建一个文件(使用bash语法),其中包含这些变量的赋值,例如

echo "export server_node2='$(</home/rt9419/tomar.log)'" >>export_settings

echo“export server_node2=”$(就像
bash-c'export foo=bar'
无法在调用shell中声明变量一样,在您键入此命令的地方,
ssh
命令无法在调用shell中声明变量。您必须进行重构,以便调用shell接收信息并知道如何处理它

我同意将日志文件存储在变量中可能不是一件明智的事情,或者至少不是一件优雅的事情,但要想做您正在尝试的事情,最简单的方法是将
ssh
放在赋值中

server_node1=$(ssh box1.com cat tomar.log)
server_node2=$(ssh box2.com cat tomar.log)
一些注释和放大:

  • 远程shell将在您的主目录中运行,因此我将其取出(显然,假设
    /home/rt9419
    是您的主目录)
  • 如果
    cat
    命令出错,ssh
的退出代码将是
cat
中的错误代码,标准错误上的错误消息将在标准错误上可见,因此
echo
似乎是多余的。(如果需要自定义消息,
variable=$(ssh任意)| echo“自定义消息“>&2
可以做到这一点。请注意重定向到标准错误;在这里这似乎无关紧要,但这是一种很好的形式。)
  • 如果您真的想,您可以在
    ssh
    中运行任意复杂的命令;如上所述,这里似乎没有必要这样做,但是您可以执行
    assimment=$(ssh remote'If[[things]];然后执行$中的变量(用于驱动循环的复杂命令);do:etc;done;fi;more我不认为日志文件是可执行的;-)。此外,OP poster希望将日志文件的内容存储到变量中(这很奇怪,但我们希望他知道他在这里做什么)。抱歉,我有一个复制/粘贴问题,并在
    [!-f]]中添加了缺少的
    cat
    sYou have
    /home/rakesh
    但是
    /home/rt9419
    cat
    中。你真的是在检查一个文件的存在,然后故意检索另一个文件,还是其中一个文件是错误的?噢,我的错!!更正了。谢谢,为什么不直接复制日志文件,并从那里获取它呢?如果日志文件包含一个引号,这是错误的会因此而断裂,否则也会变得相当脆弱。