是否可以在 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"将启动开发服务器作为守护进程。对于我的特定问题来说,这是一个很好的解决方案,但是如果能为手头的原始问题找到一个解决方案,那就太好了。
您可能应该首先启动命令而不附加到屏幕会话,例如
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++ a。d发送quit或运行exit通常可以代替ctrl+ d。
另一种解决方法是使用expect它来发送包含控制字符或其十六进制值的字符串。