【问题标题】:Shell export not working外壳导出不起作用
【发布时间】:2011-03-26 14:49:44
【问题描述】:

有一个shell程序。外壳程序:

  1. 包含一个运行并打印三个值的命令(它是另一个 shell 程序)。
  2. 然后导出三个值。
  3. 最后执行了一个 Perl 文件(这使用导出的值)。

所有这些都发生在一个 shell 文件中。

我的问题是 Perl 文件中没有发生导出。可能是什么问题?

【问题讨论】:

  • 你必须给我们更多的东西才能继续下去。你至少可以发布shell脚本吗?可能还有 perl 脚本?
  • 这个问题应该得到最短的答案:任何东西。说真的,你认为我们是魔术师吗?顺便说一句,我们中的一些人确实并且可以告诉您,您的概念可能行不通。
  • 我们可以用脚本来说明问题吗?你甚至都不说这是哪个外壳。

标签: perl shell unix


【解决方案1】:

您确实没有给我们太多帮助,但下面的脚本符合问题中的标准。它产生答案 6。 (1) 中的命令是echo,它打印三个值。 (2) 中的命令显然是export 行。 (3)中的命令是perl命令,它将环境变量a、b和c中的值加上一个换行符。

 set -- $(echo a=1 b=2 c=3)
 export $1 $2 $3
 perl -e 'print $ENV{a} + $ENV{b} + $ENV{c}, "\n"'

它有无数种可能的变化;我不会声称这是解决您问题的好方法。但它符合规定的标准。不过,您最好展示您自己解决问题的尝试,并寻求帮助以改进它。

此外,如果您运行脚本,您将看到,export 确实有效。如果它在您的脚本中不起作用,那一定意味着您在滥用它。但是,由于您没有向我们展示您的代码,我们无法帮助您解决代码中的问题。将自己的缺点归咎于工具的是一个可怜的工匠。声称数百万人每天成功使用的东西“不起作用”是一个暴君的标志。您找到破坏它的方法的可能性很小 - 但这种可能性微乎其微,必须详细举例说明。

【讨论】:

  • 使用我的水晶球,我怀疑 rathika 的错误是认为在 perl 脚本中可以使用 $a 而不是 $ENV{a}。
【解决方案2】:

如 cmets 中所述,使用如此多的信息进行诊断有点困难,但如果您让 perl 脚本从标准输入而不是从环境中读取值,则无需导出任何内容。那么你的“shell程序”就是

command_from_step_1 | perl_script_from_step_3

中间有一个管道字符。

【讨论】:

    【解决方案3】:

    尝试使用 shell 的“-x”选项运行脚本,看看发生了什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      相关资源
      最近更新 更多