4

コンソールを備えた、ROBUST と呼ばれる長期実行サーバー プロセスがあります。画面で実行し、接続してサーバーを手動で操作します (仮想世界のサーバーです)。

ときどきユーザーを追加する必要がある Web アプリ (プロローグ) があります。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 コンソールに接続して見てみると、 create user で回線が終了していると思います。

さまざまな一重引用符と二重引用符をエスケープするために考えられるすべてのスキームを試しましたが、この時点で困惑しています。

後のコメント:

プロローグの 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"'

文字列は ' ' 内で展開されません。$1 などを展開するには、bash に " " を使用する必要があります。

于 2012-11-07T18:53:00.593 に答える