【问题标题】:How to execute linux console app without ./如何在没有 ./ 的情况下执行 linux 控制台应用程序
【发布时间】:2013-03-19 14:35:10
【问题描述】:

哇,首先让我说我已经数不清我在这个网站上找到了多少答案。你们太棒了!

所以,我发布的第一个问题是相当基本的,所以我希望它没有受到好评。我确实在谷歌和这里搜索过答案,但没有找到答案。

我刚刚在 linux 上创建了一个带有 code:blocks 的控制台应用程序,编译它然后在 code:blocks 中运行。工作得很好。然后我打开 linux bash shell,cd 到二进制文件所在的位置,然后尝试从那里运行它,没有骰子。我的一个 linux 伙伴过来告诉我尝试 ./ 在它之前。维奥拉,这行得通。我傻眼了,因为我认为 ./ 只需要执行 shell 脚本。我检查了 g++ 构建的二进制文件的文件权限,它们是:-rwxrwxr-x

我找到了其他关于使用 code:blocks 构建 Hello World 应用程序的教程,他们还说使用 ./ 在命令行上执行。/

为什么会这样?另外,如何构建控制台应用程序或任何其他二进制应用程序,这样 ./ 不需要执行它?我假设有可能以某种方式看到绝大多数内置的 linux 命令,例如 grep 等,不需要 ./ 来执行。

谢谢各位。

【问题讨论】:

标签: linux console-application


【解决方案1】:

要在类 UNIX 系统上运行可执行文件,您需要了解路径解析。如果可执行文件的路径不包含在PATH 环境变量中(. 有时不包含),您需要自己指定。

通过将. 附加到PATH,如下所示:

export PATH=$PATH:.

您可以从当前工作目录运行可执行文件,而无需添加./。但是请注意,这在多用户系统中可能是不安全的,因为其他用户可以在没有您明确许可的情况下在组或全局可写目录中提供可执行文件供您运行。

【讨论】:

  • 追加 .到路径是一个很大的安全漏洞。 superuser.com/questions/156582/…
  • 哦,我明白了,所以像 grep、cat 等这样的程序可以在没有 ./ 的情况下执行的原因是因为 /bin 和其他类似的区域在 PATH 中?
  • 是的,这确实有效。我刚刚将 g++ 编译器构建二进制文件的 'Release' 目录添加到 PATH 中,然后在没有 ./ 的情况下执行它!谢谢大家,现在我知道了,知道是成功的一半!
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 2021-12-02
相关资源
最近更新 更多