如何在bash脚本中输入键盘快捷键

Pet*_*Tao 5 bash

是否可以在 bash 脚本中输入键盘快捷键?例如,我尝试输入^d来代替 control + d(注销),但没有成功。

ubuntu@vfleet:~$ ^d
-bash: :s^d: substitution failed
ubuntu@vfleet:~$ ^D
-bash: :s^D: substitution failed
Run Code Online (Sandbox Code Playgroud)

我正在使用screen在后台运行 django 开发服务器。将特定屏幕作为守护程序运行的命令之一是 control + a + d。目标是能够在 bash 脚本中输入 control + a + d。例如:

python manage.py runserver
^a + d
Run Code Online (Sandbox Code Playgroud)

这可能吗?

编辑: Eric Renouf 在下面的评论中链接了避免屏幕中键盘快捷键的有效方法。screen -d -m sh -c "python manage.py runserver"将启动开发服务器作为守护进程。对于我的特定问题来说,这是一个很好的解决方案,但是如果能为手头的原始问题找到一个解决方案,那就太好了。

小智 5

xdotool包就是这里的解决方案。

xdotool key ctrl+d
Run Code Online (Sandbox Code Playgroud)

完整参考


Eri*_*ouf 2

您可能应该首先启动命令而不附加到屏幕会话,例如

screen -d -m python manage.py runserver
Run Code Online (Sandbox Code Playgroud)

但如果由于某种原因您无法执行此操作,您可以通过执行以下操作从当前所在的屏幕会话中分离:

screen -S "$STY" -X detach
Run Code Online (Sandbox Code Playgroud)

screen将其当前会话信息保存在 中STY,因此我们将使用它来确保与正确的会话进行交互(如果有很多会话)。然后我们将用来-X向该会话发送一条命令,在这种情况下,我们的命令将detach分离所有附加的会话,包括用于执行该命令的会话

因此,虽然这实际上并不发送击键,但它确实强调了您通常可以发送另一个命令来实现您的目标。这里detach取代了ctrl++ ad发送quit或运行exit通常可以代替ctrl+ d

另一种解决方法是使用expect它来发送包含控制字符或其十六进制值的字符串。