我需要从程序中确定 Linux 命令是否是内置命令。我还需要偶尔运行该内置命令。我将使用别名作为示例,它也适用于其他内置函数。
我发现的一个恰当的答案是使用:
sh -c 'type alias'
Run Code Online (Sandbox Code Playgroud)
这将返回 'alias is a shell builtin',正是我所需要的。但是...我也需要运行它。我尝试过的任何事情都不会这样做。所有这些都在终端窗口中失败(并以编程方式):
sh -c 'alias' (没有任何输出)sh -c 'command alias' (没有任何输出)sh -c 'builtin alias' (sh:1:内置:未找到)sh -c 'type builtin' (内置:未找到)sh -c 'type command' (命令是内置的shell)sh -c 'type type' (类型是内置的外壳)(几乎)不用说,所有这些命令(即没有sh -c)在终端上都可以正常工作。这让我对sh -c命令看似不合理的性质感到困惑。
我的问题是:所有 Linux 版本都是这样吗?我是否缺少开关或设置?那么,我如何从程序中执行内置函数以取回其输出?
我正在开发 Kubuntu 14.04(在 Trisquel 中也是如此);此问题发生在konsole和xterm和程序化调用中。
感谢您的评论和回答,不胜感激。
我确实需要澄清我在做什么:我正在编写一个 CLI 助手 GUI,一个存储最喜欢的 linux 命令并执行它们的程序。
我使用 freepascal/Lazarus,它有一个 TProcess 类,可以启动一个进程并提供对 stdin、stdout 和 stderror 的访问权限。
这对于基于文件的命令(例如 rsync 等)非常有效,并且我输入和输出文本没有问题。我什至可以复制管道,只需将输出从一个进程传递到另一个进程的输入。但... …