Как установить переключатель для команды bash для linux (True или False)?
В настоящее время я назначил свою кнопку thinkvantage, чтобы отключить касание, чтобы щелкнуть по трекпаду, но я хотел бы преобразовать его в режим включения / выключения.
На данный момент это команда bash, которую я использую, чтобы выключить ее (или включить с помощью CTRL):
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?
3 ответа
Предположительно что-то вроде этого:
#!/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/sh
или более старые выпуски Bash, рассмотримstatus=$(printf '%s\n' "$status" | tr '[:upper:]' '[:lower:]')
вместо этого, или просто удалите эту строку, если выводgsettings get
всегда всегда строчные - Сравнение
[[ $status = true ]]
опирается на расширение bash[[ ]]
(также доступно в других современных оболочках, полученных из ksh), чтобы избежать цитирования. Если вы хотите, чтобы это работало с#!/bin/sh
, вы бы использовали[ "$status" = true ]
вместо. (Обратите внимание, что==
допустимо внутри[[ ]]
, но не допускается внутри[ ]
на чистых оболочках POSIX; Вот почему лучше не использовать его).
Обратите внимание, что пробелы важны в bash! foo = bar
, foo= bar
а также foo=bar
это совершенно разные утверждения, и все три из них делают разные вещи от двух других. Обязательно ознакомьтесь с различиями при копировании из этого примера.
Переключение секунд на часах 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)'
Источник: https://www.commandlinefu.com/commands/view/24256/toggle-the-touchpad-on-or-off
synclient TouchpadOff=$(synclient -l | grep -q 'TouchpadOff.*1'; echo $?)
или же
tp=$(synclient -l | grep TouchpadOff | awk '{ print $3 }') && tp=$((tp==0)) && synclient TouchpadOff=$tp