2

現在、トラックパッドのタップによるクリックをオフにするように thinkvantage ボタンを割り当てていますが、トグル オン/オフ スイッチに変換したいと考えています。

今のところ、これは私がそれをオフにする (または CTRL でオンにする) ために使用する bash コマンドです。

gsettings set org.gnome.settings-daemon.peripherals.touchpad tap-to-click true
gsettings set org.gnome.settings-daemon.peripherals.touchpad tap-to-click false

つまり、これを条件付きトグル スイッチの bash ステートメントに変換するにはどうすればよいでしょうか。

4

3 に答える 3

6

おそらく次のようなものです:

#!/bin/bash
class=org.gnome.settings-daemon.peripherals.touchpad
name=tap-to-click
status=$(gsettings get "$class" "$name")
status=${status,,} # normalize to lower case; this is a modern bash extension
if [[ $status = true ]]; then
  new_status=false
else
  new_status=true
fi
gsettings set "$class" "$name" "$new_status"

それをバラバラに分解する:

  • #!/bin/bashこのスクリプトのインタプリタが bash であることを確認し、 などの拡張構文を有効にします[[ ]]
  • 構文$( )は「コマンド置換」です。これはコマンドを実行し、そのコマンドの出力を置き換えます。したがって、出力が の場合true、 にstatus=$(...)なりstatus=trueます。
  • パラメータ展開${name,,}は、コンテンツnameをすべて小文字に変換しながら展開し、新しいバージョンの bash でのみ使用できます。/bin/shbash の以前のリリースをサポートする場合は、代わりに検討するか、出力が常に小文字status=$(printf '%s\n' "$status" | tr '[:upper:]' '[:lower:]')である場合はこの行を削除してください。gsettings get
  • 比較は、引用の必要性を避けるために、bash 拡張機能 (他の最新の ksh 派生シェルでも使用可能) に[[ $status = true ]]依存しています。[[ ]]で動作させたい場合は、代わりに#!/bin/shを使用[ "$status" = true ]します。(は の==内部では許容されますが、純粋な POSIX シェルの内部では許容[[ ]]されない[ ]ことに注意してください。これが、使用する習慣を持たないことが最善である理由です)。

bash では空白が重要であることに注意してください。foo = barfoo= barおよびfoo=barは完全に異なるステートメントであり、3 つすべてが他の 2 つとは異なることを行います。この例からのコピーの違いを認識しておいてください。

于 2015-02-18T16:16:38.173 に答える
1

Ubuntu Unity クロックの秒数の切り替え (キーバインドのコマンドとして直接貼り付け可能):

bash -c 'gsettings set com.canonical.indicator.datetime show-seconds $(gsettings get com.canonical.indicator.datetime show-seconds | perl -neprint/true/?false:true)'

GNOME の場合:

bash -c 'gsettings set org.gnome.desktop.interface clock-show-seconds $(gsettings get org.gnome.desktop.interface clock-show-seconds | perl -neprint/true/?false:true)'

于 2016-12-19T18:08:06.947 に答える