我有一个名为 ROBUST 的长期运行的服务器进程,它有一个控制台。我们在屏幕上运行它并附加以手动操作服务器(它是一个虚拟世界服务器)。
我有一个偶尔需要添加用户的网络应用程序(在序言中)。ROBUST 有几个编程接口,由于各种原因,它们都很尴尬。所以我试图只是脱壳,用-X附加一个屏幕,然后做打字的等价物
创建用户 SomeUser SomeName SomePass someone@somewhere.com 换行
在控制台上。这条线
screen -S ROBUST -p 0 -X eval 'stuff "create user SomeUser SomeName SomePass somebody@somewhere.com ^M"
'
作品
但是当我把它放在这个 bash 脚本中时
#!/bin/bash
screen -S ROBUST -p 0 -X eval 'stuff "create user $1 $2 $3 $4 ^M"'
它没有。用另一个终端连接到 ROBUST 控制台并观看,它认为该行在创建用户处结束
我已经尝试了所有我能想到的方案来转义各种单引号和双引号,但在这一点上我很难过。
后来评论:
通过找出 prolog process_create 语法,我解决了对 bash 脚本的需求
?- process_create(path(screen), ['-S', 'ROBUST', '-p', '0', '-X', eval, 'stuff "create user Manny Muncher somepass somebody@uh.edu^M"'], []).