我正在尝试使用 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
如您所见,我能够检查远程调用中的输入变量是否存在。
这应该对你有用。