在 Shell 脚本中导出 $DISPLAY 值

在 Shell 脚本中导出 $DISPLAY 值

我正在尝试在我的 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 

相关内容