根据 popen() 的手册页,我正在打开 /bin/sh ...有没有办法可以重载此行为以打开 /bin/bash shell 并与 BASH shell 脚本交互?还是我需要打开一个 pty 样式的连接才能做到这一点?
问问题
4517 次
2 回答
3
如果您想在传递给 的代码段中使用 bash 结构popen
,您可以从 sh 显式调用 bash。
f = popen("exec bash -c 'shopt -s dotglob; cat -- *'", "r");
如果您在 bash 代码段中需要单引号,请将它们传递为'\''
. 所有其他字符都按字面意思传递。
如果您有想要运行的现有 bash 脚本,只需指定其路径,与任何脚本或其他程序相同。确保脚本是可执行的并且以#!/usr/bin/env bash
or开头#!/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 回答