GNU/Linux >> Linux の 問題 >  >> Ubuntu

-eq:単項演算子が必要ですか?

この質問にはすでに回答があります :単項演算子が期待されます

(2つの回答)
4年前に閉鎖されました。

私はこのスクリプトを持っています。これは、特定のアプリケーション/プロセスが起動されたときにNVIDIA-SETTINGSの活気を変えます(私の場合はCounter-Strike:Global Offensive game)

スクリプト:

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

このスクリプトの何が問題になっていますか、なぜこれらのエラーが発生するのですか?

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

編集:

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

承認された回答:

チャットで説明したように、スクリプトを書き直しました:

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

コマンドnvidia-settings -q "DigitalVibrance" -tの場合を除いて、これは正常に機能するはずです。 現在の設定値を数値として返す代わりに、空の出力があります。

関連:バイナリから単純なdebianパッケージを作成する方法は?

より適切にフォーマットされ、元のスクリプトで発生したいくつかのエラーが修正され、ifの変数が正しく引用されます。 元のスクリプトのコマンドがシステムで何もしなかったことがわかったため、実際に機能するコマンドをテストして使用し、nvidia設定値を取得および設定します。また、コンソールにステータス出力を表示するオプションのログ機能を追加しました。これは、log_enabled="true"の行を置き換えることで無効にできます。 log_enabled="false"を使用 。

ログイン時にこのスクリプトを自動的に開始する方法については、「ログイン時にアプリケーションを自動的に開始するにはどうすればよいですか?」を参照してください。またはコマンドラインからスタートアップアプリケーションにスクリプトを追加するにはどうすればよいですか?


Ubuntu
  1. Grep-o-wでMacOsXで期待される出力が得られないのはなぜですか?

  2. Cifs Fstabが起動とマウントで開始しない-a期待どおりに機能しませんか?

  3. 6 Bash 条件式の例 ( -e, -eq, -z, !=, [, [[ ..)

  1. cron スクリプトが crontab から期待どおりに実行されない – トラブルシューティング

  2. Linux および gcc 4 での C++ の新しい演算子のスレッド セーフ

  3. [ :シェル プログラミングの予期しない演算子

  1. Linuxコマンドでの(!)記号または演算子の10の驚くべき不思議な使用法

  2. Bashスクリプト:バッククォート演算子から$括弧への移動

  3. sizeof 演算子の実装