我正在尝试在我的 Shell 脚本下打印 $DISPLAY 的值。
我有以下导出 DISPLAY 的 shell 脚本:
#!/bin/sh
export DIPLAY=:10.0
这里,每次我都需要手动更改值来完成任务。
我们可以使用命令使 DISPLAY 值动态化吗:
echo $DISPLAY 'Prints the current Display Value :10.0
我已尝试使用以下代码,但它不会将 DISPLAY 值分配给变量:
#!/bin/sh
export DIPLAY=echo $DISPLAY
以下是完整的代码:
#!/bin/sh
export DISPLAY=:10.0
export ANT_HOME=/home/abc/Desktop/Eclipse/plugins/org.apache.ant_1.9.2.v201404171502
cd /home/abc/Desktop/auto/Automation/xyz
ant usage clean compile build run makexsltreports sendemail
我使用 crontab 作业每小时运行一次此 shell 脚本
请提出建议!!
答案1
echo $DISPLAY
不起作用。如果可以,您DISPLAY
首先就不需要设置或导出。您需要使用其他方法找出适当的值。
如果您想了解DISPLAY
用户当前正在运行什么,请尝试:
w -h $USER | awk '$2 ~ /:[0-9.]*/{print $2}'
然后你可以这样做:
export DISPLAY=$(w -h $USER | awk '$2 ~ /:[0-9.]*/{print $2}')
w
列出当前登录的用户以及他们从哪里登录,用于DISPLAY
通过 GUI 登录的用户。- 使用
awk
,我们将第二个字段(位置)与看起来像的东西进行匹配DISPLAY
并将其打印出来。
答案2
我无法发表评论,因为我还没有 50 分。只想评论一下 muru 的回答:awk 需要打印第三列的 DISPLAY 号码(至少在 16.04 中),因为第二列"$2"
打印的是 tty 号码。
因此不要这样:
w -h $USER | awk '$2 ~ /:[0-9.]*/{print $2}'
它应该是:
w -h $USER | awk '$3 ~ /:[0-9.]*/{print $3}'
我用:
DISPLAY_M=$(echo "export DISPLAY"$(w -h $USER | awk '$3 ~ /:[0-9.]*/{print $3}' | sed 's/\:/=\:/')
当调用时,它会打印完整的export DISPLAY=:0
。sed 部分是将添加=
到回显中。
谢谢 muru。
答案3
命令应该是:
#!/bin/bash
export DISPLAY=$(echo $DISPLAY)
这里您需要使用命令替换功能,$(command)
即bash
。
编辑:
现在,看了你的完整脚本后,我终于明白了一切。
首先在您的目录中创建一个文件,home
例如/home/abc/display_check
包含以下行:
echo $DISPLAY
现在在您的原始脚本中添加一行source /home/abc/display_check
,即您的原始脚本可以采用以下形式:
#!/bin/bash
export DISPLAY=$(source /home/abc/display_check)
export ANT_HOME=/home/abc/Desktop/Eclipse/plugins/org.apache.ant_1.9.2.v201404171502
cd /home/abc/Desktop/auto/Automation/xyz
ant usage clean compile build run makexsltreports sendemail