在 bin 中创建程序

Nul*_*low 8 linux path binary raspberry-pi

我已经编译链接并在 C++ 中创建了一个程序,现在我有了

foobar.out
Run Code Online (Sandbox Code Playgroud)

我希望能够将它放入 bin 目录并像系统范围的命令一样使用它,例如

ssh, echo, bash, cd...
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Kus*_*nda 25

有两种方法可以让您在不指定路径的情况下运行二进制文件(不包括创建别名或 shell 函数以使用绝对路径为您执行它):

  1. 将其复制到您的$PATH.
  2. 将它所在的目录添加到您的$PATH.

例如,要将文件复制到路径中的目录/usr/local/bin本地管理软件应该去的地方),您必须具有超级用户权限,这通常意味着使用sudo

$ sudo cp -i mybinary /usr/local/bin
Run Code Online (Sandbox Code Playgroud)

必须注意不要覆盖目标目录中的任何现有文件(这就是我-i在这里添加的原因)。


要将目录添加到您的$PATH,请在您的~/.bashrc文件中添加一行(如果您正在使用bash):

PATH="$HOME/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

...如果二进制文件在$HOME/bin.

这样做的好处是您不需要拥有超级用户权限或在机器的基本系统中更改/添加任何内容。您只需要将二进制文件移动到bin您的主目录的目录中。

请注意,更改.bashrc将在下次获取文件时生效,如果您打开新终端或注销并再次登录,或source ~/.bashrc手动运行,则会发生这种情况。


Bas*_*tch 10

您应该阅读有关PATH变量的更多信息。我强烈怀疑您应该适当地使用(或更改)它。

我希望能够将其放入 bin 目录中

我猜你的意思是/bin//usr/bin/。我不确定在那里添加自己的程序是否明智。ln -sv $(realpath foobar.out) /usr/bin/如果您绝对希望您的程序出现在那里(恕我直言,这可能是一个错误,因为您弄乱了您的发行版的包管理器),也许最好在其中放置一个符号链接(例如使用类似的东西)。

也许你的安装程序/usr/local/bin/ 是更明智(离开都/bin//usr/bin/完整,由您提供和管理Linux发行版)。请参阅LSB并阅读有关文件层次结构标准的更多信息。

... 像系统范围的命令,例如 .... cd

这是对您的强烈误解(在您问题的原始变体中,您cd后来正确地删除了)。cd 不是也不能是可执行文件,它是(并且必须是)shell 的内置命令。

您可能需要阅读可免费下载的Advanced Linux Programming以了解为什么cd不能成为可执行文件(当前工作目录是每个进程状态的一部分,每个进程都有自己的一个,并且可以使用chdir(2)更改它.. .)


Hau*_*ing 7

install /path/to/oobar.out /usr/local/bin/
Run Code Online (Sandbox Code Playgroud)