This is the script I currently have-
#!/bin/bash
if["$#" == "2" OR who | grep ":0" == ""]
export DISPLAY=:0
xset dpms force on
mplayer -fs $1.mp4
fi
It doesn't work.
Thanks for your help.
This is the script I currently have-
#!/bin/bash
if["$#" == "2" OR who | grep ":0" == ""]
export DISPLAY=:0
xset dpms force on
mplayer -fs $1.mp4
fi
It doesn't work.
Thanks for your help.
You should spend some time reading man test
, it looks to me like you've got several problems here:
if [ "$#" = "2" -o -z "$(who | grep ':0')" ]; then
[
.-o
is the OR operator.-z
for testing against the empty string.$(...)
to execute the who command.]
.who
prints out times and grep
is going to match a lot of false positives against HH:MM:SS
. You may want to improve your match.$(who|grep)
, rather than testing for empty string output.In the future, more detail than "it doesn't work" is preferred ;)
In BASH, the test for NULL is -z
, e.g if [ -z "$NAME" ]; then ...
. However, you can just as easily use the exit status from grep instead:
root@tpost-desktop:/usr/src# who | grep :0
tpost tty7 2010-05-23 09:16 (:0)
root@tpost-desktop:/usr/src# echo $?
0
root@tpost-desktop:/usr/src# who | grep :123
root@tpost-desktop:/usr/src# echo $?
1
If grep did not find what you asked, it will exit with a non-zero status. So you could do something like:
who | grep :0 >/dev/null 2>&1
if [ $? = 0 ]; then
USING_DISPLAY=1
else
USING_DISPLAY=0
fi
Then test the value of USING_DISPLAY
, play the movie if its 0
There needs to be a space after the if
, after the [
and before the ']'.
#!/bin/bash
if [ "$#" == "2" ] || ! who | grep '(.*:0.*)$' > /dev/null 2>&1
then
export DISPLAY=:0
xset dpms force on
mplayer -fs $1.mp4
fi