4

我有一个名为 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"'], []).
4

1 回答 1

3
screen -S ROBUST -p 0 -X eval 'stuff "create user $1 $2 $3 $4 ^M"'

字符串不在 ' ' 内展开。bash 必须使用 " " 来扩展 $1 等。

于 2012-11-07T18:53:00.593 回答