GNU/Linux >> Linux Esercitazione >  >> Ubuntu

-eq:operatore unario previsto?

Questa domanda ha già risposte qui :Atteso operatore unario

(2 risposte)
Chiuso 4 anni fa.

Ho questo script, che cambia la vivacità di NVIDIA-SETTINGS, quando viene avviata una determinata applicazione/processo (nel mio caso Counter-Strike:Global Offensive game)

Sceneggiatura:

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

Cosa c'è di sbagliato in questo script, perché mi dà questi errori?

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

MODIFICA:

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

Risposta accettata:

Ho riscritto la sceneggiatura per te, come discusso in chat:

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

Questo dovrebbe funzionare correttamente, tranne nel caso in cui il comando nvidia-settings -q "DigitalVibrance" -t ha un output vuoto invece di restituire il valore delle impostazioni correnti come numero.

Correlati:come creare un semplice pacchetto debian da binario?

È più ben formattato, corregge alcuni errori che avevamo nello script originale, cita correttamente le variabili nel if test e utilizza comandi effettivamente funzionanti per ottenere e impostare il valore delle impostazioni di nvidia, poiché abbiamo scoperto che quelli nello script originale non hanno fatto nulla sul tuo sistema. Ho anche aggiunto una funzione di registrazione opzionale per mostrare alcuni output di stato nella console, che puoi disabilitare sostituendo la riga log_enabled="true" con log_enabled="false" .

Informazioni su come avviare automaticamente questo script all'accesso, puoi leggere Come si avviano automaticamente le applicazioni all'accesso? o Come aggiungere uno script alle applicazioni di avvio dalla riga di comando?


Ubuntu
  1. 10 usi sorprendenti e misteriosi di (!) Simbolo o operatore nei comandi Linux

  2. Errore script Bash:è prevista un'espressione intera?

  3. Cifs Fstab non si avvia all'avvio e al montaggio -a non funziona come previsto?

  4. 7 potenti esempi di operatori Awk (operatori unario, binario, aritmetico, stringa, assegnazione, condizionale, Reg-Ex Awk)

  5. 7 Linux Grep OR, Grep AND, Grep NOT Esempi di operatori

Come creare un certificato TLS/SSL con un operatore Cert-Manager su OpenShift

Perché Grep -o -w non mi dà l'output previsto su Mac Os X?

Bash:analizza le bandiere e un argomento previsto (non opzionale)?

6 Esempi di espressioni condizionali Bash ( -e, -eq, -z, !=, [, [[ ..)

Cron Script non viene eseguito come previsto da crontab – Risoluzione dei problemi

C++ nuovo operatore thread safety in linux e gcc 4