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