【问题标题】:How to access Java property in terminal如何在终端中访问 Java 属性
【发布时间】:2019-12-15 09:14:57
【问题描述】:

我知道我可以使用

从终端获取所有 Java 系统属性
java -XshowSettings:properties -version

如何只访问一个特定的 java 系统属性? 例如,像“user.name”?

我想在终端中执行此操作,而不是使用 Java。

【问题讨论】:

  • 在java方式中,答案是否定的。但是如果想知道用户,可以通过unix命令或者windows命令知道系统的用户名。

标签: java bash terminal


【解决方案1】:

如果您需要 bash 中的当前登录用户,只需使用 whoami 命令。如果要从终端获取 java 属性,可以使用以下命令

java -XshowSettings:properties -version 2>&1 | grep user.name

将打印出来

$java -XshowSettings:properties -version 2>&1 | grep user.name
    user.name = user

如果你只需要用户名

java -XshowSettings:properties -version 2>&1 | grep user.name | cut -c 16-100

将打印出来

$java -XshowSettings:properties -version 2>&1 | grep user.name | cut -c 16-100
user

【讨论】:

  • 虽然这确实允许您获得一个通常等于user.name 的值,但这实际上并不能概括回答所提出的问题,如果另一个属性要被替换。
  • 有更标准化的做法吗?我还需要其他几个变量。
  • @AndreyAkhmetov 是的,我正在测试 grep 它不能直接工作。我编辑了答案
【解决方案2】:

解决方案作为一个衬里脚本。只需将val 变量更改为您要打印的键即可:

val='java.library.path'; java -XshowSettings:properties -version 2>&1 | sed -re 's/^ +[^=]+ =/_&/' | gawk -v key=$val 'BEGIN{ RS="_"; IFS=" = "} { if($1 ~ key){ print $0 }}'

详情
一些属性值如java.library.path 包含新行,因此我们需要在过滤和打印记录之前标记记录。
sed 允许我们这样做,然后awk 可以用于过滤和打印。

java -XshowSettings:properties -version 2>&1 |\
sed -re 's/^ +[^=]+ =/_&/' |\
gawk -v key=java.library.path 'BEGIN{ RS="_"; IFS=" = "} { if($1 ~ key){ print $0 }}'

结果:

    java.library.path = /usr/java/packages/lib/amd64
        /usr/lib64
        /lib64
        /lib
        /usr/lib

管道部分解释:

2>&1:属性打印到标准错误,所以我们需要将它们重定向到标准输入。

sed -re 's/^ +[^=]+ =/_&/' :在有趣的行前添加下划线,以 4 个空格开头并包含 =

gawk -v key=java.library.path:将keyawk 变量设置为选定的属性键。

'BEGIN{ RS="_"; IFS=" = "}:将记录分隔符设置为“_”,输入字段分隔符 IFS 为=

【讨论】:

    【解决方案3】:

    你不能。

    你可以做的是创建一个java文件来获取信息并使用java运行,here the documentation

    既然你已经说过你不想要这个,你可以grep(过滤)

    的输出
    java -XshowSettings:properties -version 2>&1 | grep java.home
    java.home = /usr/java/jdk1.8.0_112/jre
    

    如果您想了解正在运行的 jvm 的系统属性,请使用jcmd tool

    jcmd PID VM.system_properties
    

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 2018-10-30
      • 1970-01-01
      相关资源
      最近更新 更多