5

根据 popen() 的手册页,我正在打开 /bin/sh ...有没有办法可以重载此行为以打开 /bin/bash shell 并与 BASH shell 脚本交互?还是我需要打开一个 pty 样式的连接才能做到这一点?

4

2 回答 2

3

如果您想在传递给 的代码段中使用 bash 结构popen,您可以从 sh 显式调用 bash。

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

如果您在 bash 代码段中需要单引号,请将它们传递为'\''. 所有其他字符都按字面意思传递。

如果您有想要运行的现有 bash 脚本,只需指定其路径,与任何脚本或其他程序相同。确保脚本是可执行的并且以#!/usr/bin/env bashor开头#!/bin/bash。如果您有一个可能无法执行的脚本(例如由于 Windows 可移植性限制),您可以显式调用 bash:

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

或者,编写你自己的自定义popen函数来调用你想要的程序(但只有在更简单的解决方案不能令人满意时才这样做,因为它更难做对)。参见例如popen() 替代方案

于 2012-09-05T01:10:22.207 回答
0

可能最简单的是有一个小的 sh 脚本,它反过来调用你的 bash 脚本,如下所示:

#!/bin/sh

exec bash yourscript.sh "$@"

或者你可以放弃 popen 并使用 fork() 和 execl() 实现你自己的 popen。

于 2012-09-03T09:40:52.023 回答