从bash调用时,屏幕转义不同

时间:2012-11-07 04:47:00

标签: bash shell prolog swi-prolog gnu-screen

我有一个名为ROBUST的长时间运行的服务器进程,它有一个控制台。我们在一个屏幕上运行它并附加以手动操作服务器(它是一个虚拟世界服务器)。

我有一个偶尔需要添加用户的网络应用程序(在prolog中)。 ROBUST有几个编程接口,由于各种原因都很尴尬。所以我想尝试一下 shell out,用-X附加一个屏幕,然后输入等效的

创建用户SomeUser SomeName SomePass somebody@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"'], []).

1 个答案:

答案 0 :(得分:3)

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

字符串不会在''内扩展。您必须使用“”表示bash扩展$ 1等等。