我怎样才能将 bash 脚本重写为一行?

我怎样才能将 bash 脚本重写为一行?

我想使用 compiz 添加手势命令。有命令CCSM 中的插件,它允许您在鼠标移动时指定屏幕的一个角来执行命令。 在此处输入图片描述

我想切换在船上屏幕键盘隐藏,鼠标移至屏幕左上角时显示。

以下脚本切换在船上但必须用一行代码将其复制到 compiz 命令插件中

  #!/bin/bash

  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

我怎样才能使它成为一行?

答案1

由于您需要使用上一个命令给出的值来运行命令,因此至少必须运行两个不同的命令。因此,首先存储值wid,然后使用一行if检查:

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

这表明了以下情况if

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

可以写成[ ... ] && do if true || do if false

仅一行:

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

答案2

您可以使用扩展名将代码保存在 bash 脚本中.sh,并在文本框中提供完整路径。

还有你的一行 bash 代码:

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

这里;用于将多行 bash 代码合并到一行中。

相关内容