小编juu*_*uus的帖子

sh -c 非理性并以编程方式确定和运行 Linux 内置命令

我需要从程序中确定 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 中也是如此);此问题发生在konsolexterm和程序化调用中。


感谢您的评论和回答,不胜感激。

我确实需要澄清我在做什么:我正在编写一个 CLI 助手 GUI,一个存储最喜欢的 linux 命令并执行它们的程序。

我使用 freepascal/Lazarus,它有一个 TProcess 类,可以启动一个进程并提供对 stdin、stdout 和 stderror 的访问权限。

这对于基于文件的命令(例如 rsync 等)非常有效,并且我输入和输出文本没有问题。我什至可以复制管道,只需将输出从一个进程传递到另一个进程的输入。但... …

bash shell command-line-interface

1
推荐指数
1
解决办法
212
查看次数

标签 统计

bash ×1

command-line-interface ×1

shell ×1