como posso reescrever um script bash como um forro?

0

Eu quero adicionar um comando de gesto usando o compiz. Existe um plugin comando no CCSM, ele permite que você atribua um dos cantos da tela na movimentação do mouse para executar um comando.

Desejoalternarotecladoonboardparaocultaremostrarnomouseamovimentaçãoparaocantodateladotopleft.

Abaixooscriptalternaonboardmasdeveserumforroparacopiá-lonoplugindecomandodocompiz

#!/bin/bashwid='xdotoolsearch--nameKeyboard|head-1'wstate='xwininfo-id$wid|grep"Map State:"'

  if [[ "$wstate" == *IsViewable ]]
  then
      xdotool windowunmap $wid
  else
      xdotool windowmap $wid
  fi

Como posso fazer um forro?

    
por kenn 11.12.2015 / 14:24

2 respostas

3

Como você precisa executar um comando com um valor fornecido por um comando anterior, você precisa pelo menos executar dois comandos diferentes. Portanto, primeiro armazene o valor de wid e, em seguida, use uma verificação de if de uma linha:

wid=$(xdotool search --name Keyboard|head -1)
[[ "$(xwininfo -id "$wid" | grep "Map State:")" == *IsViewable ]] && xdotool windowunmap $wid || xdotool windowmap $wid

Isso leva em consideração o fato de que uma condição if :

if [ ... ]; then
   do if true
else
   do if false
fi

Pode ser escrito como um mero [ ... ] && do if true || do if false

Em apenas uma linha:

wid=$(xdotool search --name Keyboard|head -1); [[ "$(xwininfo -id "$wid" | grep "Map State:")" == *IsViewable ]] && xdotool windowunmap $wid || xdotool windowmap $wid
    
por fedorqui 11.12.2015 / 14:39
3

Você pode salvar seu código no script bash com .sh extension e fornecer um caminho completo na caixa de texto.

E seu código bash de uma linha:

wid="$(xdotool search --name Keyboard|head -1)"; wstate="$(xwininfo -id $wid | grep "Map State:")"; if [[ "$wstate" == *IsViewable ]];then xdotool windowunmap $wid; else xdotool windowmap $wid; fi

Aqui ; é usado para combinar o código bash da linha multilinha em uma linha.

    
por snoop 11.12.2015 / 14:39