当前位置: 首页 > 知识库问答 >
问题:

在bash中使用环境变量向java进程追加多个命令

裴姚石
2023-03-14

我有一个java进程,我试图从bash文件中的环境变量加载多个参数。示例:

export JAVA_OPTS="-Dparam.one.name=value_one -Dparam.two.name=value_two"

#not working:
java \
  "${JAVA_OPTS}" \
  -jar cookie.jar

#working:
java \
  -Dparam.one.name=value_one \
  -Dparam.two.name=value_two \
  -jar cookie.jar

有办法解决这个问题吗?这是格式问题吗?这背后的想法是,如果我想使用一些其他/新参数,我不想更改脚本,我只想更改环境变量。

如果我把所有的东西都放在一行中,也许它会起作用,但是这会使实际的命令变得非常长,所以这不是一个最佳解决方案。

同样的事情也适用于一个属性。

我真的很欣赏其他方法。

共有1个答案

曾新立
2023-03-14

引用变量意味着它们被扩展到一个单词。通常这是一件好事,但是在这种情况下,你想要分词,所以不要引用扩展。

如果$JAVA_OPTS包含任何全局字符,如*,则禁用全局扩展也是一个好主意?.你不希望这些被意外扩大。因为这是一个全局设置,可能会对其他命令产生负面影响,所以我建议在子shell中进行,因此更改仅限于java命令。

(
  set -o noglob
  java \
    $JAVA_OPTS \
    -jar cookie.jar
)
 类似资料:
  • 问题内容: 在中,我有以下脚本正在工作: Bash中的功能等效于什么? 有直接的模拟吗?环境变量用于查找可执行文件。 问题答案: 将VAR设置为value。如果需要空格,请用单引号将其引起来。如果要对变量进行插值,请使用双引号,例如。

  • 问题内容: 我正在尝试从我的Perl程序中运行Bash命令。但是Perl似乎使我的Bash $ PWD环境变量与Perl变量混淆了。 我如何才能将其全部读取为字符串? 这就是我要运行的 这些反引号在Bash中运行第二行。使用System()会产生相同的问题。 有任何想法吗? 问题答案: 这里有两个查询,关于使用Bash变量和运行外部命令。 Perl中有哈希,带有环境变量 但是,通常最好在脚本中使用

  • 问题内容: 如何在bash for循环中使用变量?如果我只是使用标准的for循环,它会达到我的期望 这很好。它循环遍历4次,包括0到3,包括打印我的消息并将计数放在末尾。 当我使用以下for循环尝试相同的操作时,它似乎等于一个字符串,这不是我想要的。 输出: 我试过了 和 他们俩都不做我所需要的。希望有人可以帮助我。预先感谢bash专家对for循环的帮助。 问题答案: 一种方法是使用: 请注意 设

  • 问题内容: 如果我在bash中运行,结果将是两个命令都运行。但是,如果我使用子进程,则将运行第一个命令,打印出该行其余部分的全部内容。下面的代码回显而不是,我如何才能运行两个命令? 问题答案: 您必须在子进程中使用shell = True,而不能使用shlex.split: 返回:

  • 问题内容: 我一直在阅读官方文档,但无法找到有关环境变量的任何信息。显然,有一些社区项目支持环境变量,但这对我来说可能是过大了。所以我想知道在使用Vue CLI创建的项目上是否有一些简单的开箱即用的功能可以正常工作。 例如,我可以看到,如果执行以下操作,则会打印出正确的环境,这意味着已经设置好了吗? 我对环境变量和Node有点陌生。 仅供参考,使用Vue CLI 3.0 beta版。 问题答案:

  • 最佳实践最好在values.yaml文件中定义环境变量还是在templates/deployment.yaml放入中定义环境变量? 如果有您使用的示例应用程序,您能提供帮助吗?