2015-02-18 1 views
0

В настоящее время я назначил свою кнопку thinkvantage, чтобы отключить нажатие, чтобы щелкнуть мой трекпад, но я бы хотел преобразовать его в режим включения/выключения.Как установить переключатель в команде linux (True или False) 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 

Есть ли способ сделать это команда переключения? Иными словами, ho я делаю это в условный оператор bash.

+1

Вы бы не использовать 'gsettings получить ... 'чтобы получить настройку? – lurker

+0

'gsettings set org.gnome.settings-daemon.peripherals.touchpad tap-to-click == true' передает' == 'и' true' в качестве аргументов команды 'gsettings'. Вы уверены, что это то, что вы хотите? –

ответ

4

Предположительно что-то вроде этого:

#!/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 гарантирует, что интерпретатор для этого сценария является Баш, что позволяет расширенный синтаксис, такие как [[ ]].
  • Синтаксис $() является «заменой команды»; это запускает команду и заменяет вывод этой команды. Таким образом, если выход 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 - совершенно разные утверждения, и все три из них делают разные вещи от двух других. Обязательно ознакомьтесь с различиями в копировании из этого примера.

+0

Это действительно полностью отвечает на мой вопрос. Однако я не могу вставить его в форму быстрого доступа к клавиатуре в настройках. Я считаю, что причина в том, что это только одна строка. Поэтому я попробовал это> class = org.gnome.settings-daemon.peripherals.Сенсорная панель; имя = водопроводная к одним нажатием кнопки; status = $ (gsettings получает «$ class» «$ name»); статус = $ {состояние ,,}; если [[$ status = true]]; тогда; new_status = false; else; NEW_STATUS = TRUE; Fi; gsettings задает «$ class» «$ name» «$ new_status» Но я получаю ошибку bash: синтаксис около неожиданного токена '; ' при вводе его в консоль. – felipe

+1

Поместите это внутри скрипта, сохраните файл и отметьте его исполняемым (chmod + x) и попросите эту команду запустить скрипт. –

+1

... поочередно, вы, вероятно, могли бы вынуть дополнительные '' 's и заставить его работать inline. Тот, кто после 'else' определенно ошибочен, когда выкладывает однострочный скрипт из сценария, и я думаю, что он после' then' тоже. Не уверен, что это исчерпывающе; нужно будет немного поиграть. –

0

переключая секунд на часах Ubuntu Unity (непосредственно pastable в качестве команды для сочетание клавиш):

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)'

Смежные вопросы