调用具有空格分隔参数的另一个脚本时,shell脚本失败

时间:2014-06-04 08:59:13

标签: shell

我们有一个脚本(脚本1)调用另一个脚本(脚本2),它希望用引号括起来传递。

随之而来的是并发症,因为script2还带有许多参数,其中一些是空格分隔的字符串,另一个是sql脚本。

这会导致script1失败。

隔离运行script2按预期工作。 当script2的参数没有任何空格分隔的字符串时,Script1有效。

看哪:

<script1> "<script2 -s "ExchangeRates" <sqlscript.sql>"

按预期工作。

然而:

<script1> "<script2 -s "Exchange Rates" <sqlscript.sql>"

失败了:

SP2-0734:未知命令开始“费率”@ / h ......“ - 其余行被忽略。

即。它将“交换”和“费率”视为两个单独的字符串。

所以,我试图逃避空间:

<script1> "<script2 -s \"Exchange Rates\" <sqlscript.sql>"

但是得到完全相同的问题。我可以想象,解决这个问题的方法可能就是盯着我看,简直太简单了,但我看不出来。

感谢任何建议。

由于

2 个答案:

答案 0 :(得分:0)

你应该逃离这个空间。或者使用两种不同的报价。

答案 1 :(得分:0)

脚本1应该是这样的:

#!/bin/sh
"$@"  ## Expands multiple arguments properly regardless of spaces.

要运行它,你应该正确传递参数:

script1 script2 -s 'Exchange Rates' sqlscript.sql

script1内,命令仍会被调用为

script2 -s 'Exchange Rates' sqlscript.sql