是否可以让 SSH 转发空参数?

是否可以让 SSH 转发空参数?

我正在尝试使用 SSH 执行远程脚本,并且此脚本会根据特定参数是否为空来改变其行为。这是一个最小示例,我创建了一个简单的tmp.sh文件,该文件会回显参数的数量以及参数是什么。当我在本地执行它时,它会按预期工作,显示它有 3 个参数。但是当我通过 SSH 执行脚本时,它显示它只有 2 个参数:

$ cat argtest.sh 
#!/bin/bash

echo $#
echo $@
$ ./argtest.sh foo '' bar
3
foo bar
$ ssh user@localhost ./argtest.sh foo '' bar
2
foo bar

有没有办法让 SSH 转发空参数,以便脚本显示它有 3 个参数?

答案1

尝试

  ssh user@localhost "./argtest.sh foo '' bar"

答案2

我对远程 Perl 调用做了类似的事情,它也应该适用于你的 bash 脚本 - 当然,需要进行一些 bash 语法更改...

使用环境变量将变量(设置或其他)“传递”到远程进程。例如,

$ ssh me@localhost 'VAR1="var1 text" /tmp/try.pl'

然后,在远程脚本中,只需检查变量是否存在,如下所示:

$ cat /tmp/try.pl
#!/usr/bin/perl
if ($ENV{VAR1}) { print "$ENV{VAR1}\n"; }
if ($ENV{VAR2}) { print "$ENV{VAR2}\n"; }

因此当调用上述代码时

$ ssh me@localhost 'VAR1="var1 text" /tmp/try.pl'
var1 text

如您所见,我能够检查远程调用中的输入变量是否存在。

这应该对你有用。

相关内容