GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

-eq:Unärer Operator erwartet?

Für diese Frage gibt es hier bereits Antworten :Unärer Operator erwartet

(2 Antworten)
Vor 4 Jahren geschlossen.

Ich habe dieses Skript, das die NVIDIA-SETTINGS-Vibranz ändert, wenn bestimmte Anwendungen/Prozesse gestartet werden (in meinem Fall Counter-Strike:Global Offensive-Spiel)

Skript:

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

Was ist falsch an diesem Skript, warum gibt es mir diese Fehler?

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

BEARBEITEN:

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

Akzeptierte Antwort:

Ich habe das Skript für Sie umgeschrieben, wie im Chat besprochen:

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

Dies sollte gut funktionieren, außer für den Fall, dass der Befehl nvidia-settings -q "DigitalVibrance" -t hat eine leere Ausgabe, anstatt den aktuellen Einstellungswert als Zahl zurückzugeben.

Verwandte:Wie erstelle ich ein einfaches Debian-Paket aus Binärdateien?

Es ist schöner formatiert, behebt einige Fehler, die wir im ursprünglichen Skript hatten, und setzt die Variablen im if korrekt in Anführungszeichen testet und verwendet tatsächlich funktionierende Befehle, um den Wert der nvidia-Einstellungen abzurufen und festzulegen, da wir herausgefunden haben, dass die im ursprünglichen Skript nichts auf Ihrem System bewirkt haben. Ich habe auch eine optionale Protokollierungsfunktion hinzugefügt, um einige Statusausgaben in der Konsole anzuzeigen, die Sie deaktivieren können, indem Sie die Zeile log_enabled="true" ersetzen mit log_enabled="false" .

Informationen zum automatischen Starten dieses Skripts bei der Anmeldung finden Sie unter Wie starte ich Anwendungen automatisch bei der Anmeldung? oder Wie füge ich ein Skript von der Befehlszeile zu Startanwendungen hinzu?


Ubuntu
  1. 10 erstaunliche und mysteriöse Verwendungen von (!) Symbolen oder Operatoren in Linux-Befehlen

  2. 7 Beispiele für leistungsstarke Awk-Operatoren (Unäre, Binäre, Arithmetische, String-, Zuweisungs-, Bedingungs-, Reg-Ex-Awk-Operatoren)

  3. Cron-Skript wird nicht wie von crontab erwartet ausgeführt – Fehlerbehebung

  4. C++ neue Operator-Thread-Sicherheit in Linux und gcc 4

  5. Implementierung des sizeof-Operators

So erstellen Sie ein TLS/SSL-Zertifikat mit einem Cert-Manager-Operator auf OpenShift

7 Beispiele für Linux-Operatoren Grep OR, Grep AND, Grep NOT

6 Verkettungsoperatoren für Bash-Shell-Befehlszeilen unter Linux

[ :Unerwarteter Operator in der Shell-Programmierung

erwarteter Bezeichner vor String-Konstante

Ist der Zugriff auf den Heap serialisiert?