GNU/Linux >> Tutoriales Linux >  >> Ubuntu

-eq:¿Se esperaba el operador unario?

Esta pregunta ya tiene respuestas aquí :Operador unario esperado

(2 respuestas)
Cerrado hace 4 años.

Tengo este script, que cambia la vitalidad de NVIDIA-SETTINGS, cuando se inicia cierta aplicación/proceso (en mi caso, el juego Counter-Strike:Global Offensive)

Guió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

¿Qué tiene de malo este script? ¿Por qué me da estos errores?

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

EDITAR:

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

Respuesta aceptada:

Reescribí el guión para ti, como se discutió en el 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

Esto debería funcionar bien, excepto en el caso de que el comando nvidia-settings -q "DigitalVibrance" -t tiene una salida vacía en lugar de devolver el valor de configuración actual como un número.

Relacionado:¿Cómo crear un paquete debian simple a partir de binario?

Tiene un formato más agradable, corrige algunos errores que teníamos en el script original, cita correctamente las variables en el if prueba y usa comandos que realmente funcionan para obtener y establecer el valor de configuración de nvidia, ya que descubrimos que los del script original no hicieron nada en su sistema. También agregué una función de registro opcional para mostrar algunos resultados de estado en la consola, que puede deshabilitar reemplazando la línea log_enabled="true" con log_enabled="false" .

Acerca de cómo iniciar este script automáticamente al iniciar sesión, puede leer ¿Cómo inicio las aplicaciones automáticamente al iniciar sesión? o ¿Cómo agregar un script a las aplicaciones de inicio desde la línea de comandos?


Ubuntu
  1. 10 usos asombrosos y misteriosos de (!) símbolo u operador en los comandos de Linux

  2. ¿Por qué Grep -o -w no me da la salida esperada en Mac Os X?

  3. Bash - Analizar banderas y un argumento esperado (no opcional)?

  4. ¿Cifs Fstab no se iniciará en el arranque y el montaje -a no funciona como se esperaba?

  5. 6 ejemplos de expresiones condicionales de Bash (-e, -eq, -z, !=, [, [[ ..)

Cómo crear un certificado TLS/SSL con un operador de administrador de certificados en OpenShift

C ++ nuevo operador de seguridad de subprocesos en linux y gcc 4

implementación del operador sizeof

Nightmare.js no funciona como se esperaba en el servidor en la nube Ubuntu Linux

¿El acceso al montón está serializado?

La vinculación simbólica de Linux no funciona como se esperaba