【问题标题】:Command works in Terminal but not via C system()命令在终端中有效,但不能通过 C system()
【发布时间】: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/shzsh(在Linux 上,它通常是bash)。
  • 我安装了 macOS Catalina、自制软件和 7z,但无法重现问题。

标签: c macos zsh


【解决方案1】:

好的,我想通了:我在 Jgrasp 中编译和运行 C。当我拿起 C 并在终端中运行它时,它起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2016-02-09
    • 2021-07-18
    • 2019-05-07
    • 1970-01-01
    相关资源
    最近更新 更多