背景: 我需要将ksh
脚本从 SunOS 5.10 移植到 RHEL 5.8。它调用 isql 以检索一些数据,并且与 isql 等最终端点客户端实用程序的预期应用完全相反,它将其解析出来以供 shell 脚本中的变量使用。请注意,我只是继承了这一点,而我自己并没有设计过这样的 hack。我当然不会解析 isql 来为 shell 中的 var 赋值——如果脚本需要这些信息,我会使用 Perl 和一些 API,比如 DBD::DBI,这些 API 旨在在应用程序和数据存储之间编组数据. 但我有我所拥有的并且必须在参数范围内工作。
发生的情况是,以下管道输入确实在 SunOS 上返回数据,但在 RHEL 中却没有:
echo "SELECT some_field FROM some_table WHERE some_crtra = 'X' \ngo" | isql -U$USER -P$PASS -D$DB -S$SERVER
Solaris 上的输出是:
some_field
------
Y
(1 row affected)
从那时起,脚本awk
仅用于从上述流中提取字段值,但让我们忽略它,因为这不是问题所在。
另请注意,我能够单独获取执行管道命令的数据,即通过手动进入 isql 并运行 SQL。所以 SQL 或连接字符串不是问题——它要么是管道流数据的方式,要么是 isql 本身在不同平台上的工作方式不同。
任何人都可以看到为什么两个系统上对相同输入有不同的响应吗?知道如何更改管道以使其正常工作吗?
谢谢