【问题标题】:Bash eval inside quotes引号内的 Bash eval
【发布时间】:2011-09-30 04:20:02
【问题描述】:

我有一个 bash 脚本,它接受一个参数并执行以下操作:

ssh -t someserver "setenv DISPLAY $1; /usr/bin/someprogram"

如何强制 bash 替换 $1 而不是将文字字符“$1”作为显示变量传递?

【问题讨论】:

  • 你确定引用是如图所示吗?它应该如图所示工作。 $1 是否有可能没有您期望的价值?
  • 似乎应该按原样工作,因为 bash 在双引号内执行替换...
  • setenv 仅在 t?csh 中有用,这真的是您在远程端运行的吗?
  • 是的,我在远程端运行 csh

标签: bash ssh


【解决方案1】:

根据您对 sehe 的回答的评论,听起来您只是希望远程命令使用本地 X 显示 - 以便程序在您的远程服务器 (someserver) 上运行,但显示在您运行的机器上ssh 命令开启。

这可以通过传递-X来完成,例如

ssh -X someserver /usr/bin/someprogram

由于某些原因,这不适用于一些程序,例如evince。我不太确定为什么。我很确定 evince 是唯一一个我在通过 SSH 连接转发回来时遇到问题的应用程序。

如果这不是您的目标,请解释。

【讨论】:

    【解决方案2】:

    编辑你知道吗

    ssh -X ...
    ssh -Y ...
    

    哪些已经支持开箱即用的 X 转发?也看看

    xhost +
    

    如果您需要增加“来宾”的权限。

    如果你想转发非标准的X显示地址,你总是可以使用

    DISPLAY=localhost:3 ssh -XCt user@remote xterm
    

    奖励:认证后做 ssh 后台,添加'-f'

    什么地方?如图所示,这应该已经工作了。远程?转义$:\$

    但是,我不确定该命令会将其参数 ($1) 从何处获取

    【讨论】:

    • 如果我的脚本被调用,runRemoteProgWithDisplay,我希望能够做到。/runRemoteProgWithDisplay 129.1.1.1:1 ....这目前给我一个错误,说无效显示
    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多