如何创建别名以同时运行服务器及其客户端

如何创建别名以同时运行服务器及其客户端

我正在尝试创建一个“别名”以在单独的终端中运行服务器,然后几秒钟后打开它的客户端,这是我正在尝试的命令:

alias kingp='xterm -e sudo /opt/king-phisher/KingPhisherServer -L INFO -f /opt/king-$/king-phisher/server_config.yml; /opt/king-phisher/KingPhisher'

问题在于,在我关闭服务器(CTRL+C)之前,它不会运行第二个命令,然后它正常运行客户端,我尝试在服务器命令末尾使用 & 和 &&,但无济于事,似乎服务器即使使用 -e 运行仍然无法释放终端以运行其他命令,我之前使用 -e 成功过,不知道为什么在别名中它不起作用,有人可以帮助我吗?非常感谢你们。

答案1

问题在于别名首先由 Bash 解释,然后由 XTerm 解释。

Bash 将整个别名解释为两个单独的命令:xterm -e sudo /opt/king-phisher/KingPhisherServer -L INFO -f /opt/king-$/king-phisher/server_config.yml/opt/king-phisher/KingPhisher,并且在当前 shell 中依次执行这两个命令。

使用&而不是;不会有帮助,因为 Bash 仍会解释&;转义;&也不会有帮助,因为 XTerm 没有 Bash 语法的概念,并且会将;&作为参数传递给/opt/king-phisher/KingPhisherServer(以及命令的其余部分,/opt/king-phisher/KingPhisher)。

唯一的解决方案是告诉 XTerm 调用 Bash 并让 Bash 进行解析:

alias kingp="xterm -e bash -c 'sudo /opt/king-phisher/KingPhisherServer -L INFO -f /opt/king-$/king-phisher/server_config.yml & /opt/king-phisher/KingPhisher'"

除非用户不需要提供sudo密码即可运行/opt/king-phisher/KingPhisherServer,否则这将导致服务器无法启动,因为sudo命令在能够读取密码之前被后台运行;请参阅此处了解可能的解决方案:如何在后台运行需要输入密码的 sudo 命令?

相关内容