Mat*_*Esu 4 command-line scripts nvidia-settings 16.04
我有这个脚本,当某些应用程序/进程启动时,它会改变 NVIDIA-SETTINGS 的活力(在我的例子中反恐精英:全球攻势游戏)
脚本:
#!/bin/bash
on="1023"
off="0"
dv="0"
# RESET
sleep 10
log "RESET"
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$off"
while true; do #daemon mode
dv=`nvidia-settings -q "[gpu:0]/DigitalVibrance[DFP-0]" -t`
if pgrep -l csgo | grep csgo_linux
then
# log "Process csgo_linux found"
if [ $dv -eq $off ]; then
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$on"
fi
else
# No process found
if [ $dv -eq $on ]; then
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$off"
fi
fi
if [ $dv -eq $on ]; then
sleep 5
else
sleep 1
fi
done
Run Code Online (Sandbox Code Playgroud)
这个脚本有什么问题,为什么给我这些错误?
622 csgo_linux64
/home/matas/Desktop/vib-gui.sh: line 18: [: -eq: unary operator expected
/home/matas/Desktop/vib-gui.sh: line 28: [: -eq: unary operator expected
622 csgo_linux64
/home/matas/Desktop/vib-gui.sh: line 18: [: -eq: unary operator expected
/home/matas/Desktop/vib-gui.sh: line 28: [: -eq: unary operator expected
622 csgo_linux64
/home/matas/Desktop/vib-gui.sh: line 18: [: -eq: unary operator expected
/home/matas/Desktop/vib-gui.sh: line 28: [: -eq: unary operator expected
622 csgo_linux64
/home/matas/Desktop/vib-gui.sh: line 18: [: -eq: unary operator expected
/home/matas/Desktop/vib-gui.sh: line 28: [: -eq: unary operator expected
Run Code Online (Sandbox Code Playgroud)
编辑:
#!/bin/bash
on="1023"
off="0"
dv="0"
# RESET
sleep 10
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$off"
while true; do #daemon mode
dv=`nvidia-settings -q "[gpu:0]/DigitalVibrance[DFP-0]" -t`
if pgrep -l csgo | grep csgo_linux
then
# log "Process csgo_linux found"
if [ "$dv -eq $off" ]; then
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$on"
fi
else
# No process found
if [ "$dv" -eq "$on" ]; then
nvidia-settings -a "[gpu:0]/DigitalVibrance[DFP-0]=$off"
fi
fi
if [ "$dv -eq $on" ]; then
sleep 5
else
sleep 1
fi
done
Run Code Online (Sandbox Code Playgroud)
Byte Commander 的回答中可能会处理您的脚本的其他问题,但对于那些来自 Google 的问题,要解决此特定问题,请始终用双引号将变量括起来。例如[ "$dv" -eq "$on" ]
。
一元运算符只有一个参数。二元运算符有两个参数。
例如,-eq
是一个二元运算符,因为它有两个参数并计算它们是否相等。
当 shell 看到 时[ 3 -eq 3 ]
,一切都很好,因为-eq
它接受了两个参数,并且它被赋予了两个参数,即3
s。但是,如果其中一个是空白的怎么办?这将是两种[ -eq 3 ]
或[ 3 -eq ]
。这些缺少一个参数,因此 shell 会认为您打算使用只有一个参数的运算符,即一元运算符。
您的变量可能为空,从而导致此问题。为避免此问题,请用双引号将变量的所有用法括起来。