当我使用gcc编译程序时,它应该使用prepending ./运行。 gcc -Wall -o hello-world hello-world.c 将生成二进制hello-world,我必须以./hello-world运行它但是我想通过输入hellow-world如何编译它来运行它作为任何其他系统bimary?
答案 0 :(得分:2)
注意@BraveNewCurrency和@songziming的答案,将可执行文件放在搜索路径中。
可以在不添加./
的情况下执行可执行文件。为此,您必须将当前目录添加到搜索路径。像这样:
export PATH='./:'$PATH
然而,这通常是不赞成的,因为它可能会产生一些意想不到的副作用。有些人甚至认为这是一种安全风险 例如,请参阅https://superuser.com/questions/156582/why-is-not-in-the-path-by-default
答案 1 :(得分:1)
您必须将包含可执行文件的目录添加到$PATH
,以便在不./
的情况下运行它。它与编译无关。
假设文件hello-world
位于/root/hello
,您必须将其添加到PATH
,例如export PATH=$PATH:/root/hello
,然后您可以使用hello-world
运行它。
Linux bash命令只是可执行文件,您可以使用which
:
$ which ps
/bin/ps
当您键入不带./
的命令时,bash将搜索PATH
环境变量中列出的所有目录,以查看它是否包含您键入的可执行文件,并在找到时运行它。在我的机器上,PATH
的内容是:
$ echo $PATH
/opt/bochs/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/opt/node-v5.1.1-linux-x64/bin:/opt/jdk1.8.0_65/bin:/opt/neovim/bin:/sbin:/opt/node-v5.1.1-linux-x64/bin:/opt/jdk1.8.0_65/bin
答案 2 :(得分:1)
这与它的编译方式无关。 Linux只运行$PATH
中的内容。因此,您可以将二进制文件复制到/ bin,/ usr / bin,有时还可以复制到/ usr / local / bin。您还可以在路径中添加〜/ bin并将二进制文件放在那里。