如何在bash中通过java传递$(date+";%Y";)之类的命令参数?

如何在bash中通过java传递$(date+";%Y";)之类的命令参数?,java,bash,parameters,scripting,Java,Bash,Parameters,Scripting,我知道我们可以通过java在运行时传递bash中的参数。我有一个特例,我想在bash中作为参数传递像$(date+%Y“%m”)这样的参数,然后在bash中计算并存储在变量中。考虑下面的java代码: String[] cmd = {"/bin/bash", "/user/username/test.sh", "firstparameter", "date +%Y", "folder_$(date +%Y)"; Process process = Runtime.getRuntime().exe

我知道我们可以通过java在运行时传递bash中的参数。我有一个特例,我想在bash中作为参数传递像$(date+%Y“%m”)这样的参数,然后在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将foldername设置为folder_2020。我们如何才能做到这一点?我试了很多次,但都没有成功。非常感谢您的帮助。

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

"folder_$(date +%Y)"

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


或者,您可以保留最后一个参数,改为修改shell脚本

替换此变量赋值:

foldername=`$3`
为此:

eval "foldername=\"$3\""

eval
调用将负责执行嵌入
$3

中的任何命令替换,非常感谢@rtx13。在过去的两个小时里,我一直在为这个问题挠头。非常感谢。非常感谢你。信息技术worked@SaugatDahal不客气。我添加了一个只需要更改shell脚本的替代解决方案。顺便说一句,在您的代码中,您以sh而不是bash的身份运行脚本。您好@user1934428,我不理解您的问题。如果你能解释一下,我对bash是新手。你正在将cmd的第一个参数设置为“sh”,这意味着你的脚本是由“sh”运行的。如果将第一个参数设置为“foofoo”,则脚本将由“foofoo”运行。如果要通过bash运行它,必须将第一个参数设置为“bash”。谢谢@user1934428。。我理解你的问题。。。。假设它是一个bash脚本..我将修改我的问题并将第一个参数更改为bash。。。
eval "foldername=\"$3\""