【问题标题】:SCP use remote server variableSCP 使用远程服务器变量
【发布时间】:2023-11-21 15:41:02
【问题描述】:

我正在编写一个脚本,试图将 scp 文件传入和传出远程服务器,并希望在脚本中使用远程服务器变量,而不是将目录硬编码到脚本中,因为这将在不同的环境中使用不同的路径。

例如获取文件的硬编码版本...

scp user@remotehost:/userbase/filefolder/file1 .

但是让我们说远程主机上的“userbase”被设置为 $BASEHOME 变量。我知道一个标准

scp user@remotehost:$BASEHOME/filefolder/file1 .

当它试图在发送 scp 的主机上评估 $BASEHOME 时不起作用

我环顾四周,网上有人建议类似以下的方法可能有效

scp user@remotehost:$(ssh user@remotehost "echo \$BASEHOME")/filefolder/file1 .

但是这个错误 - 我尝试了 printf 而不是 echo、单引号和没有 \before $BASEHOME 但没有工作,出现类似于以下的错误(好像它没有拾取变量)

scp: /filefolder/file1: 没有这样的文件或目录

scp'ing 时是否可以使用远程变量?

谢谢!

【问题讨论】:

    标签: variables unix scp


    【解决方案1】:

    不,不能将远程 shell 变量与 scp 一起使用。

    解决方法1:获取远程变量一次,以后再使用它:

    BASEHOME=$(ssh user@remotehost 'echo $BASEHOME')
    scp user@remotehost:$BASEHOME/filefolder/file1 .
    

    解决方法2:cat远程端的文件并重定向到本地文件:

    ssh user@remotehost 'cat $BASEHOME/filefolder/file1' > file1
    

    【讨论】:

    • 感谢您的建议 - 它对我来说不太奏效,但让我走上了正确的轨道 我最终使用的命令有点像这样; BASEHOME=$(ssh -t user@remotehost ". ~/.profile > /dev/null ; echo \$BASEHOME") 我不得不 ssh -t 并调用 .profile 并重定向到 /dev/null 所以所有的输出没有出现在变量中
    • @user2920657 谢谢,您的评论帮助很大。我还必须先明确来源我的个人资料。
    最近更新 更多