【问题标题】:How to pass an command argument like $(date +"%Y") in bash through java?如何通过java在bash中传递像$(date +“%Y”)这样的命令参数?
【发布时间】:2020-07-22 18:16:55
【问题描述】:

我知道我们可以通过 java 中的运行时在 bash 中传递参数。我有一个特殊情况,我想将 $(date +"%Y""%m") 之类的参数作为 bash 中的参数传递,然后将其计算并存储在 bash 中的变量中。考虑以下 java 代码:

String[] cmd = {"/bin/bash", "/user/username/test.sh", "firstparameter", "date +%Y", "folder_$(date +%Y)";
Process process = Runtime.getRuntime().exec(cmd);

上面的命令运行shell脚本test.sh。我的脚本如下:

first=$1
year=`$2`
foldername=`$3`

echo $first
echo $year
echo $foldername

我在我的 bash 代码中包含了反引号,以便可以首先执行通过 java 程序传递的参数。该命令的输出将是:

firstparameter
2020
$(date: not found

我希望 bash 的文件夹名称为 folder_2020。我们怎样才能做到这一点?我尝试了很多次,但都没有成功。任何帮助将不胜感激。

【问题讨论】:

  • 顺便说一句,在您的代码中,您将脚本运行为 sh,而不是 bash
  • 嗨@user1934428,我不明白你的问题。如果您能稍微解释一下,我是 bash 新手。
  • 你将cmd的第一个参数设置为'sh',这意味着你的脚本是由'sh'运行的。如果您将第一个参数设置为“foofoo”,则脚本将由“foofoo”运行。如果你想通过 bash 运行它,你必须将第一个参数设置为 'bash'。
  • 谢谢@user1934428 ..我理解你的问题..它应该是一个bash脚本..我将修改我的问题并将第一个参数更改为bash ...

标签: java bash parameters scripting


【解决方案1】:

你可以替换最后一个参数:

"folder_$(date +%Y)"

"date +folder_%Y"

将参数变为有效命令可确保它按 shell 脚本中的预期执行。


或者,您可以保留最后一个参数,而是修改您的 shell 脚本。

替换这个变量赋值:

foldername=`$3`

用这个:

eval "foldername=\"$3\""

eval 调用将负责执行嵌入在 $3 中的任何命令替换。

【讨论】:

  • 非常感谢@rtx13。在过去的两个小时里,我一直在为这个问题挠头。真的很感激。太感谢了。成功了
  • @SaugatDahal 不客气。我添加了一个仅需要更改 shell 脚本的替代解决方案。
猜你喜欢
  • 2014-10-17
  • 1970-01-01
  • 2012-10-01
  • 2017-05-18
  • 1970-01-01
  • 2017-04-14
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多