【问题标题】:Do commands run from current directory in a shell script?命令是否从 shell 脚本中的当前目录运行?
【发布时间】:2011-03-13 01:11:41
【问题描述】:

在一个 bash shell 脚本中,我尝试了这两个版本:

java -jar abc.jar&

CMD="java -jar abc.jar&"
$CMD

第一个版本有效,第二个版本抱怨找不到 abc.jar。为什么?

【问题讨论】:

  • 这两个版本是等价的(虽然第二个更差)。 thisFile 是否包含空格?
  • 没有空格。为什么它适用于第一个而不是第二个?
  • 因为您在运行第一个版本时已经将其重命名为thatFile
  • 嗯 mv 只是一个例子,我实际上是在尝试运行 java 命令。
  • 你是如何运行脚本的?尝试使用 -x 查看调试输出。另外,输入echo $PWD 看看它是否是您认为的位置。

标签: java linux bash shell scripting


【解决方案1】:

命令确实从 shell 脚本中的当前目录运行。

这就是您的测试脚本中的第一个命令起作用的原因。

第二个命令可能不起作用,因为java 不在您的${PATH} 中,或者abc.jar 不在您的${CLASSPATH} 中。您可以echo 这些环境变量或set +x 来调试您的bash 脚​​本。

【讨论】:

  • java -jar 不使用 CLASSPATH 环境变量。它只使用清单文件中的Class-Path 条目。
【解决方案2】:

Bash(和其他)不会让您在变量的值内进行后台处理 (&)(他们也不会让您以这种方式或管道进行重定向)。您应该避免将命令放入变量中。有关更多信息,请参阅BashFAQ/050

您收到的实际错误消息是什么?我敢打赌,它类似于“abc.jar& not found”(注意与符号),因为与符号被视为文件名中的一个字符。

此外,脚本的当前目录是运行它的目录 - 不是它所在的目录。您应该明确说明要将文件放入的目录。

java -jar /path/to/abc.jar&

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 2019-02-10
    • 2012-04-11
    • 2011-06-11
    • 2017-05-02
    • 1970-01-01
    • 2013-11-03
    • 2012-04-01
    • 1970-01-01
    相关资源
    最近更新 更多