GNU/Linux >> Tutoriels Linux >  >> Ubuntu

-eq :opérateur unaire attendu ?

Cette question a déjà des réponses ici :Opérateur unaire attendu

(2 réponses)
Fermé il y a 4 ans.

J'ai ce script, qui modifie la vibration de NVIDIA-SETTINGS, lorsque certaines applications/processus sont lancés (dans mon cas Counter-Strike:Global Offensive game)

Scénario :

#!/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'est-ce qui ne va pas avec ce script, pourquoi me donne-t-il ces erreurs ?

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

MODIF :

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

Réponse acceptée :

J'ai réécrit le script pour vous, comme discuté dans le 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

Cela devrait fonctionner correctement, sauf dans le cas où la commande nvidia-settings -q "DigitalVibrance" -t a une sortie vide au lieu de renvoyer la valeur des paramètres actuels sous forme de nombre.

Connexe :Comment créer un paquet Debian simple à partir du binaire ?

Il est plus joliment formaté, corrige quelques erreurs que nous avions dans le script original, cite correctement les variables dans le if teste et utilise des commandes qui fonctionnent réellement pour obtenir et définir la valeur des paramètres nvidia, car nous avons découvert que celles du script d'origine ne faisaient rien sur votre système. J'ai également ajouté une fonction de journalisation facultative pour afficher une sortie d'état dans la console, que vous pouvez désactiver en remplaçant la ligne log_enabled="true" avec log_enabled="false" .

Pour savoir comment démarrer ce script automatiquement lors de la connexion, vous pouvez lire Comment démarrer des applications automatiquement lors de la connexion ? ou Comment ajouter un script aux applications de démarrage à partir de la ligne de commande ?


Ubuntu
  1. Script bash :passage de l'opérateur backtick aux parenthèses $

  2. Erreur de script bash :expression entière attendue ?

  3. Pourquoi Grep -o -w ne me donne-t-il pas la sortie attendue sur Mac Os X ?

  4. Bash - Drapeaux d'analyse et argument attendu (non facultatif) ?

  5. Cifs Fstab ne démarre pas au démarrage et le montage -a ne fonctionne pas comme prévu ?

10 utilisations étonnantes et mystérieuses du symbole (!) ou de l'opérateur dans les commandes Linux

Comment créer un certificat TLS/SSL avec un opérateur Cert-Manager sur OpenShift

[ :Opérateur inattendu en programmation shell

identifiant attendu avant la constante de chaîne

Nightmare.js ne fonctionne pas comme prévu sur le serveur cloud Ubuntu Linux

L'accès au tas est-il sérialisé ?