【发布时间】:2021-01-17 15:09:47
【问题描述】:
我正在使用 Mac Catalina 并尝试使用自制软件安装的功能。这个问题对我来说是一个特别令人费解的问题。我尝试以多种方式调用此命令。它在 shell zsh 和 bash 上运行,而且我知道自制程序未添加的常规命令在 shell 中可以正常工作,但在使用 C system() 调用时却不能。我试图在 python 中进行相同的调用,它说它的 os.system() 是使用 C system() 调用实现的,但它在 python 中有效。 C 和终端都使用相同的 shell (zsh),但是当 C 尝试时说找不到该命令。为什么python和终端能找到homebrew安装的命令却找不到C?如果有帮助,我会发布 C 代码。
这是 C 返回的内容: sh: 7z: command not found 但是 echo $SHELL with C 返回 bin/zsh,就像终端一样。 我也尝试过 sh shell,但是在那个 shell 中执行 7z 也可以。我尝试的最后一件事是 C 调用 python 和 python 调用 os.system,但这导致相同的命令未找到响应,即使从终端尝试时 python 的 os.system() 工作。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int main() {
system("7z e /Users/...something.7z -p abc");
}
【问题讨论】:
-
echo $SHELL显示您的登录 shell,而不是当前运行的 shell。您可以使用ps -p $$; true来获得一些想法,尽管它可能与问题无关。type 7z在你的终端里说什么? -
这听起来像是
system()用来运行命令的shell 使用的路径的问题。 Homebrew 将程序安装在属于它的目录中,对,而不是在默认系统目录中? -
也许 Homebrew 正在将其目录添加到一个只能由登录 shell 读取的初始化文件(例如 .bashrc)中。
-
请注意,您通过
system()函数获得的消息之间不一定存在任何不一致。该函数的一致实现将通过/bin/sh执行给定的命令,但在Catalina 上,/bin/sh是zsh(在Linux 上,它通常是bash)。 -
我安装了 macOS Catalina、自制软件和 7z,但无法重现问题。