GNU/Linux >> Znalost Linux >  >> Ubuntu

-eq:Očekává se unární operátor?

Tato otázka zde již obsahuje odpovědi :Očekává se unární operátor

(2 odpovědi)
Uzavřeno před 4 lety.

Mám tento skript, který mění vibrace NVIDIA-SETTINGS, když je spuštěna určitá aplikace/proces (v mém případě hra Counter-Strike:Global Offensive)

Scénář:

#!/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

Co je na tomto skriptu špatného, ​​proč mi zobrazuje tyto chyby?

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

UPRAVIT:

#!/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

Přijatá odpověď:

Přepsal jsem pro vás skript, jak je uvedeno v chatu:

#!/bin/bash

# set log_enabled="true" for status output, else log_enabled="false"
log_enabled="true"

on="1023"
off="0"
dv="0"


log () {
  if $log_enabled
    then 
      echo "$(date +%H:%M:%S) - $1"
  fi
}


log "waiting 10 seconds..."
sleep 10

log "resetting DigitalVibrance to $off (off)"
nvidia-settings -a "DigitalVibrance=$off" > /dev/null

log "beginning to watch for csgo_linux processes"
while true
do
  dv=$(nvidia-settings -q "DigitalVibrance" -t)
  log "current DigitalVibrance setting: $dv"

  if pgrep "csgo_linux" > /dev/null
    then  # if CS:GO is running
      if [ "$dv" -eq "$off" ]
        then  # if DigitalVibrance is currently off
          log "setting DigitalVibrance to $on (on)"
          nvidia-settings -a "DigitalVibrance=$on" > /dev/null
      fi

    else  # if CS:GO is not running
      if [ "$dv" -eq "$on" ]
        then  # if DigitalVibrance is currently on
          log "setting DigitalVibrance to $off (off)"
          nvidia-settings -a "DigitalVibrance=$off" > /dev/null
      fi
  fi

  if [ "$dv" -eq "$on" ]
    then
      sleep 5
    else
      sleep 1
  fi

done

To by mělo fungovat dobře, s výjimkou případu, kdy příkaz nvidia-settings -q "DigitalVibrance" -t má prázdný výstup místo toho, aby vrátil aktuální hodnotu nastavení jako číslo.

Související:Jak vytvořit jednoduchý balíček debianu z binárního kódu?

Je lépe naformátovaný, opravuje některé chyby, které jsme měli v původním skriptu, správně cituje proměnné v if testuje a používá skutečně fungující příkazy k získání a nastavení hodnoty nastavení nvidia, protože jsme zjistili, že ty v původním skriptu ve vašem systému nic neudělaly. Také jsem přidal volitelnou funkci protokolování pro zobrazení některých stavových výstupů v konzole, kterou můžete zakázat nahrazením řádku log_enabled="true" s log_enabled="false" .

O tom, jak spustit tento skript automaticky při přihlášení, si můžete přečíst Jak automaticky spustím aplikace při přihlášení? nebo Jak přidat skript do Startup Applications z příkazového řádku?


Ubuntu
  1. 10 úžasných a záhadných použití (!) symbolu nebo operátoru v příkazech Linuxu

  2. Cifs Fstab se nespustí při spuštění a připojení -a nefunguje podle očekávání?

  3. 7 příkladů výkonných operátorů Awk (unární, binární, aritmetické, řetězcové, přiřazení, podmíněné, regulární awk operátory)

  1. Cron Script se nespouští podle očekávání z crontab – Odstraňování problémů

  2. [ :Neočekávaný operátor v programování shellu

  3. implementace sizeof operátora

  1. Bash skriptování:Přesun z operátoru backtick do závorek $

  2. Je přístup k haldě serializován?

  3. Symbolické propojení Linuxu nefunguje podle očekávání