UnixWare 7 无法将变量传递给 Linux

UnixWare 7 无法将变量传递给 Linux

我是 Bash 新手,我遇到了一个很难解决的问题,但对某些人来说可能很容易。

我有一个非常旧的 SCO UnixWare 7 系统,没有 SSH,只有 RSH 可用。 SCO已经不存在了,我相信他们已经破产了。盒子已经使用了大约 15 年,从未出现过问题。我们将在夏天离开这个平台,但现在我需要将一些文件复制到其中一个 Linux 机器上,并且我正在尝试编写一个非常短的脚本。请不要告诉我 RSH 不安全,因为在这种环境中安全性是无关紧要的。 UnixWare 盒子和另外两个运行 CentOS 6 的 Linux 盒子是专用的,仅供 3 个人使用,用于管理停车场中的多个障碍物,不连接到互联网或任何其他网络。只有 3 台服务器,连接到 4 端口独立交换机,没有其他连接

问题

我在 Unixware 服务器上运行此命令,在运行 CentOS 6 的 Linux1 上使用格式化数据设置变量并显示内容:

rsh Linux1 "TEST=$(date --date='-9day' +%A_%B-%d_Backup); echo \$TEST" 

我收到这个错误

# rsh Linux "TEST=$(date --date='-9day' +%A_%B-%d_Backup); echo \$TEST"
UX:date: ERROR: Illegal option -- -
UX:date: ERROR: Incorrect usage
UX:date: TO FIX: Usage:
        date [-u] [+format]
        date [-u] [[mmdd]HHMM | mmddHHMM[[cc]yy]]
        date [-a [-]sss.fff]

如果我转到同时运行 CentOS 6 的 Linux2 并针对 Linux1 运行相同的命令,我不会出现任何错误

[Linux2 ~]# rsh Linux1 "TEST=$(date --date='-9day' +%A_%B-%d_Backup); echo \$TEST"
Wednesday_January-14_Backup

为什么从 UnixWare 服务器运行该命令时不起作用?看来 Unixware 不会将字符串传递给 Linux1 来处理,而是尝试在本地处理它(--date那个古老的 Unixware 盒子上没有选项,因此出现错误)。

答案1

这实际上不是 UnixWare、Bash 或 RSH 特定的问题。这是一个引用问题,它将影响任何date与远程系统没有相同实现的系统。例如,当从运行 Bash 的 Mac SSH 到 Linux 机器时也会发生这种情况。

要使远程系统date而不是本地系统运行,请像这样调整引用:

# rsh Linux1 'TEST=$(date --date=-9day +%A_%B-%d_Backup); echo $TEST'

请注意,我们也可以通过这种方式跳过一些内部引用和转义。

相关内容