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

5

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

ubuntu@vfleet:~$ ^d
-bash: :s^d: substitution failed
ubuntu@vfleet:~$ ^D
-bash: :s^D: substitution failed

我正在使用 screen 在后台运行 Django 开发服务器。其中一个将特定屏幕作为守护进程运行的命令是 control + a + d。目标是能够将 control + a + d 输入到 Bash 脚本中。例如:
python manage.py runserver
^a + d

这可行吗?

编辑: 在下面的评论中,Eric Renouf提供了一种有效的避免在screen中使用键盘快捷方式的方法。 screen -d -m sh -c "python manage.py runserver"将作为守护进程启动开发服务器。 这是我的问题的一个很好的解决方案,但仍然希望有一个解决原始问题的解决方案。


2
如果您只是想在screen会话中启动某个程序,可以在一开始时就不必附加它。例如:https://dev59.com/fUvSa4cB1Zd3GeqPcCQB。 - Eric Renouf
您的需求是:每次服务器/机器重新启动时,需要启动Django开发服务器。 如果这是您的需求,我可以为您提供答案。 - subha.py
2个回答

5

1
我该如何运行 ctrl+a+[?它一直报错。 - alexzander
1
错误:无效的键序列 ctrl+a+[ - alexzander

2
您最好还是在第一次启动命令时不要附加到屏幕会话中,例如:
screen -d -m python manage.py runserver

但是如果由于某些原因您无法这样做,您可以通过以下方式从当前的屏幕会话中分离出来:

screen -S "$STY" -X detach

screen 会将当前会话信息保存在 STY 中,因此我们将使用它来确保与正确的会话进行交互(如果有多个会话)。然后,我们将使用 -X 发送命令到该会话,本例中我们的命令将是 detach,它将分离所有已连接的会话,包括用于执行该命令的会话。

因此,虽然这实际上并没有发送按键,但它确实突出了通常可以发送另一个命令以实现目标。在这里,detach 取代了 ctrl+a+d。发送 quit 或运行 exit 通常可以替换 ctrl+d

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接