如何从 shell 或 windows 命令行以内联方式执行 java jshell 命令
How to execute java jshell command as inline from shell or windows commandLine
是否有任何方法可以在不启动 REPL (jshell
) 的情况下将 java 命令作为内联命令执行?
例如Perl 内联命令
$perl -e 'printf("%06d", 19)'
000019
我必须启动 jshell 以 运行 任何命令:
$jshell
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
jshell> String.format("%06d", 19)
==> "000019"
我发现了类似的问题 ,但是为单个命令创建单独的 jsh
文件并不是可行的解决方案。
同一个 post 的另一个解决方案是:echo "1+2"|jshell
temp=`echo 'String.format("%06d", 19)'|jshell`
echo $temp
哎哟输出
| Welcome to JShell -- Version 9 | For an introduction type: /help intro jshell> String.format("%06d", 19) ==> "000019" jshell>
我希望 $temp
只打印 000019
。
默认情况下,normal
反馈模式用于您与 JShell
的交互,此模式打印命令输出、声明、命令和提示。阅读 Introduction to jshell feedback modes 了解更多详情。
获取命令输出的步骤:
运行 jshell
in concise
反馈模式跳过命令和声明细节,它仍然会打印提示和值。
$ echo 'String.format("%06d", 19)' | jshell --feedback concise
jshell> String.format("%06d", 19)
==> "000019"
使用 sed
-
从结果中过滤第二行
echo 'String.format("%06d", 19)' | jshell --feedback concise | sed -n '2p'
仅提取值并排除其他详细信息-
echo 'String.format("%06d", 19)' | jshell --feedback concise | sed -n '2p' |sed -En 's/[^>]*>(.+)//gp'
如果使用System.out.println,则不需要第二个sed
echo "System.out.println(\"$JAVA_HOME\");" | jshell --feedback concise | sed -n '2p'
是否有任何方法可以在不启动 REPL (jshell
) 的情况下将 java 命令作为内联命令执行?
例如Perl 内联命令
$perl -e 'printf("%06d", 19)'
000019
我必须启动 jshell 以 运行 任何命令:
$jshell
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
jshell> String.format("%06d", 19)
==> "000019"
我发现了类似的问题 jsh
文件并不是可行的解决方案。
同一个 post 的另一个解决方案是:echo "1+2"|jshell
temp=`echo 'String.format("%06d", 19)'|jshell`
echo $temp
哎哟输出
| Welcome to JShell -- Version 9 | For an introduction type: /help intro jshell> String.format("%06d", 19) ==> "000019" jshell>
我希望 $temp
只打印 000019
。
默认情况下,normal
反馈模式用于您与 JShell
的交互,此模式打印命令输出、声明、命令和提示。阅读 Introduction to jshell feedback modes 了解更多详情。
获取命令输出的步骤:
运行
jshell
inconcise
反馈模式跳过命令和声明细节,它仍然会打印提示和值。$ echo 'String.format("%06d", 19)' | jshell --feedback concise jshell> String.format("%06d", 19) ==> "000019"
使用
从结果中过滤第二行sed
-echo 'String.format("%06d", 19)' | jshell --feedback concise | sed -n '2p'
仅提取值并排除其他详细信息-
echo 'String.format("%06d", 19)' | jshell --feedback concise | sed -n '2p' |sed -En 's/[^>]*>(.+)//gp'
如果使用System.out.println,则不需要第二个sed
echo "System.out.println(\"$JAVA_HOME\");" | jshell --feedback concise | sed -n '2p'