我有一个可以通过 SSH 在 Linux 服务器上执行命令的应用程序。当我连接到 Solaris 服务器时,一切都无法正常工作。似乎 Solaris 命令行被限制为 267 个字符。
有没有办法改变这个?
更新:如前所述,这是对 Solaris (sh) 与 Linux (bash) 的默认 shell 的限制。那么,现在的问题是,有没有办法改变 sh 的限制?
我有一个可以通过 SSH 在 Linux 服务器上执行命令的应用程序。当我连接到 Solaris 服务器时,一切都无法正常工作。似乎 Solaris 命令行被限制为 267 个字符。
有没有办法改变这个?
更新:如前所述,这是对 Solaris (sh) 与 Linux (bash) 的默认 shell 的限制。那么,现在的问题是,有没有办法改变 sh 的限制?
您可以使用以下命令查看当前命令的最大长度:
$ getconf ARG_MAX
1048320
我创建了一个脚本,可以确定远程命令的最大长度。正如克雷格建议的那样,如果可以的话,最好的办法是将命令输入标准输入。
我相信(尽管可能是错误的)这与您连接的默认 shell 有关。如果您在 Solaris 上对您在 Linux 上使用的相同 shell 进行更改,是否可以解决问题?
如果有更好的解决方案路线,请发表评论,我会更改我的答案。
在我看来,您的选择是:
第一个很简单,但需要管理员对每个用户/机器组合进行更改,并且可能会影响其他程序。从长远来看,更改运行命令的方式会更快,也更容易维护。例如,假设您需要执行以下操作:
/usr/bin/foo with a very long list of options and parameters
现在你可能正在做这样的事情:
ssh user@machine "/usr/bin/foo with a very long list of options and parameters"
但您可以改为执行以下操作:
echo "/usr/bin/foo with a very long list of options and parameters" | \
ssh user@machine "/bin/bash"
这将做你想要的。
只需为用户更改 shell 解释器(编辑 /etc/passwd)或临时运行另一个 shell,例如。korn shell 如下:
serwer%
serwer% echo *
Arguments too long
serwer% ksh
$ echo *
file1
file2
....
file 10000
% exit
serwer%
当我在 Solaris 10 上运行 configure 并且 configure 脚本提供了一个命令行长度的数字时,答案通常在 256 KB 范围内。Solaris 上的标准 shell 肯定没有低于 300 字节的限制。
也就是说,我不确定你的问题是什么。我可能会猜测 Solaris SSH 的限制较短——我没有遇到过这个问题,但我倾向于使用 SSH 作为直接(交互)连接而不是运行长命令的一种方式。