【问题标题】:Bash script for usb controller connection output?USB控制器连接输出的Bash脚本?
【发布时间】:2015-07-30 17:23:33
【问题描述】:

我有一个 bash 脚本,可将我的 USB 控制器配置为与 Steam 一起使用的 Xbox 360 控制器。这是当前脚本:

#!/bin/bash
lsmod | grep xpad

sudo xboxdrv --evdev /dev/input/event14 --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RX=x2,ABS_RZ=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --axismap -Y1=Y1,-Y2=Y2 --evdev-keymap BTN_TOP=x,BTN_TRIGGER=y,BTN_THUMB2=a,BTN_THUMB=b,BTN_BASE3=back,BTN_BASE4=start,BTN_TOP2=lb,BTN_PINKIE=rb,BTN_BASE=lt,BTN_BASE2=rt,BTN_BASE5=tl,BTN_BASE6=tr --mimic-xpad --silent &

exit 0

我想添加某种“if”“else”语句来说明如果脚本成功,则通知我它有效。 但我不知道该怎么做。

例如

如果“脚本运行良好” 然后 notify-send -t 2000 USB 控制器连接成功 否则“什么都不做”

我的问题是:

1.我需要 2 个单独的脚本吗?即一个运行第一个,另一个读取该脚本的输出并生成通知,或者我可以在同一个脚本中完成所有操作吗?

2.如何读取该输出?

一般在脚本运行后在终端中创建新事件后,它会告诉我新的事件编号(通常是 event15)。如果不是,它会标记一个错误。

任何帮助将不胜感激,

提前致谢

【问题讨论】:

标签: bash if-statement grep output


【解决方案1】:

脚本 1

#!/bin/bash
lsmod | grep xpad

sudo xboxdrv --evdev /dev/input/event14 --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RX=x2,ABS_RZ=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --axismap -Y1=Y1,-Y2=Y2 --evdev-keymap BTN_TOP=x,BTN_TRIGGER=y,BTN_THUMB2=a,BTN_THUMB=b,BTN_BASE3=back,BTN_BASE4=start,BTN_TOP2=lb,BTN_PINKIE=rb,BTN_BASE=lt,BTN_BASE2=rt,BTN_BASE5=tl,BTN_BASE6=tr --mimic-xpad --silent &

脚本 2

#!/bin/bash
output=$(/path/to/script1)
if [ $? -eq 0 ]; then
    #do something
fi

【讨论】:

  • 感谢您的回复 - 只是最后一个问题,抱歉。这似乎脚本读取了退出状态,如果脚本成功退出然后产生结果(如果我错了,请纠正我,我是新手)。我希望它像这样读取脚本的结果:如果在运行脚本后,结果显示的话,你的 xbox 控制器现在配置为 /dev/input/event15,按 ctrl-c 退出然后通知我它是成功的,如果脚本的结果显示设备或资源忙然后通知我它失败了对不起,如果这没有意义。
  • 是否需要在后台运行 xboxdrv 命令?需要多长时间?
  • 老实说,我可能只运行一次命令。它仅用于创建新事件。我只是想让它通知我,因为我已经将它创建到一个菜单项中,而不是从终端运行。这对我来说更像是一种学习。我喜欢创建脚本,但我的知识非常有限。我真的很感谢你的帮助
【解决方案2】:
#!/bin/bash
lsmod | grep xpad

command1="sudo xboxdrv --evdev /dev/input/event14 --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RX=x2,ABS_RZ=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --axismap -Y1=Y1,-Y2=Y2 --evdev-keymap BTN_TOP=x,BTN_TRIGGER=y,BTN_THUMB2=a,BTN_THUMB=b,BTN_BASE3=back,BTN_BASE4=start,BTN_TOP2=lb,BTN_PINKIE=rb,BTN_BASE=lt,BTN_BASE2=rt,BTN_BASE5=tl,BTN_BASE6=tr --mimic-xpad --silent"

command2="notify-send -t 2000 USB controller connection successful" #Your command here. 

output=$(command1) && [ echo $output | grep -q "Replace this with your success output" ] && $command &

【讨论】:

  • 我不知道这是否更有意义,但是当第一个脚本运行时,它会产生 2 个结果中的一个,如果它成功它告诉我它已将新事件保存到 / dev/input/event15 然后说 Press Ctrl-c to quit。如果不成功,它会显示“设备或资源忙”。这些结果仅在脚本运行之后。所以我的想法是grep它的结果,然后通知我。但它什么也没做。这是我做的,但正如我所说。它什么都不做
【解决方案3】:
#!/bin/bash
lsmod | grep xpad

command1=$(sudo xboxdrv --evdev /dev/input/event14 --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RX=x2,ABS_RZ=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --axismap$

command2=$(notify-send -t 2000 USB controller connection successful) #Your command here. 

output=$(command1) && [ echo $output | grep -q "Press Ctrl-c to quit" ] && $command2 &

exit 0

【讨论】:

  • 嗨 t_thirupathi - 我尝试了您编辑的版本并得到 /joypad.sh: line 8: command1: command not found,我也尝试了上述方法,但没有得到结果抱歉
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多