5

popen() のマニュアル ページによると、/bin/sh を開いています... /bin/bash シェルを開いて BASH シェル スクリプトと対話するために、この動作をオーバーロードする方法はありますか? または、それを行うには pty スタイルの接続を開く必要がありますか?

4

2 に答える 2

3

に渡すスニペットで bash コンストラクトを使用する場合はpopen、sh から明示的に bash を呼び出すことができます。

f = popen("exec bash -c 'shopt -s dotglob; cat -- *'", "r");

bash スニペット内で一重引用符が必要な場合は、として渡します'\''。他のすべての文字は文字どおりに渡されます。

実行したい既存の bash スクリプトがある場合は、スクリプトや他のプログラムと同じように、そのパスを指定するだけです。#!/usr/bin/env bashスクリプトが実行可能であり、またはで始まることを確認してください#!/bin/bash。実行できない可能性のあるスクリプトがある場合 (たとえば、Windows の移植性の制約のため)、bash を明示的に呼び出すことができます。

f = popen("exec bash myscript.bash", "r");

または、必要なプログラムを呼び出す独自のカスタムのpopenような関数を作成します (ただし、より単純なソリューションでは満足できない場合にのみ行ってください。正しく行うのはより難しいためです)。たとえばpopen() 代替を参照してください。

于 2012-09-05T01:10:22.207 に答える
0

おそらく最も簡単なのは、次のように bash スクリプトを呼び出す小さな sh スクリプトを用意することです。

#!/bin/sh

exec bash yourscript.sh "$@"

または、popen をやめて、fork() と execl() を使用して独自の popen を実装することもできます。

于 2012-09-03T09:40:52.023 に答える