【问题标题】:Assign directory listing to variable in bash script over ssh通过 ssh 将目录列表分配给 bash 脚本中的变量
【发布时间】:2011-10-06 06:28:50
【问题描述】:

我正在尝试通过 ssh 连接到远程计算机,获取目录列表,将其分配给一个变量,然后我希望能够在本地计算机上的其余脚本中使用该变量。

经过一些研究并设置了所有正确的键等,我可以通过 ssh 运行命令就好了。具体来说,如果我这样做:

ssh -t user@server "ls /dir1/dir2/; exit; bash"

我确实得到了一个目录列表。如果我改为这样做:

ssh -t user@server "set var1=`ls /dir1/dir2/`; exit; bash"

而是给出找不到目录的 ls 错误。另外值得注意的是,这发生在我被要求输入 ssh 密钥密码之前,这让我认为它以某种方式在本地执行。

知道如何在 bash 脚本中使用远程主机的目录列表创建局部变量吗?

【问题讨论】:

  • 您想在本地机器上还是在远程服务器上设置该变量?

标签: bash ssh


【解决方案1】:

简单

var1=( $(ssh user@server ls /dir1/dir2) )

然后测试它:

for line in "${var1[@]}"; do echo "$line"; done

也就是说,我更喜欢

ssh user@server find /dir1/dir2 -maxdepth 1 -print0 | 
    xargs -0

这会

  • 更好地处理特殊文件名
  • 更灵活 (man find(1))
  • 添加 -type f 以仅限文件

【讨论】:

  • @l0b0:恭喜您获得 2^11 的声誉!
  • 为了只显示子目录,我必须在该查找中添加一个-mindepth 1 :)
【解决方案2】:

quote 中的命令在执行 ssh 命令之前执行。转义单引号应该修复

【讨论】:

  • 需要明确的是,这是其中之一,而不是其中之一。我确实尝试用 \ 转义它(如果这就是你的做法,我对此很陌生)但这并没有解决它,尽管我不记得错误。我把它放在那里的原因是因为有人曾经告诉我,我需要它来将东西放入列表中循环:)。
猜你喜欢
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2011-10-08
  • 2020-08-14
  • 2020-04-22
相关资源
最近更新 更多