如何在不指定路径的情况下运行我自己的程序

如何在不指定路径的情况下运行我自己的程序

假设我已经编译了一些东西并且像这样运行它:

$ /path/to/my/executable/mycmd
Hello World

我需要做什么才能运行它

$ mycmd
Hello World 

来自我计算机中的任何地方?

答案1

您正在寻找的是PATH环境变量。它告诉 shell 需要在哪里寻找程序。您可以使用以下命令查看该变量的当前值echo

echo "$PATH"

现在...如果您想使用某些新程序,最佳实践是使用您的发行版的包管理程序来安装它。但在这种情况下,我假设您正在处理一个不是由任何可用软件包提供的程序。对于此类程序,您有两种选择:

  1. 在系统范围内安装该程序,安装在系统所在的位置不是放置从包安装的任何文件。在大多数系统上,此类“安全”文件夹包括/usr/local/bin//opt/bin/- 这些文件夹应该已经位于您的PATH. (查看这些文件夹里面,如果里面有很多文件,那就是错误的放置您自己的程序的地方,您必须查看 中列出的其他文件夹PATH。)
  2. 修改你的PATH变量。这不太安全,因为它定义了可以保存程序的附加文件夹,有人可能会欺骗你,把他自己的程序放在那里供你运行。

    您可以PATH临时修改变量,使用

    export PATH="$PATH:/path/to/your/executable"
    

    (注意$PATH =),或者通过将以上行添加到您的.bashrc文件中来永久地使用(假设您使用bash)。

答案2

用户脚本(或编译后的可执行文件)通常存储在该~/bin目录中。这允许您在不指定路径的情况下运行它们。

但是,如果您不想将自己的脚本与~/bin已安装的软件包和程序放置的脚本混合在一起,则可以将脚本存储在您选择的目录中并将其绑定到~/bin.您的脚本将在其中可见,~/bin并且您将能够使用简单的名称从终端运行它们,而无需指定路径。

一次性使用可以运行此命令(重启后效果消失):

mkdir /home/user/.overlay
sudo mount -t overlay overlay -o lowerdir=/home/user/my-scripts-directory,upperdir=/home/user/bin,workdir=/home/user/.overlay /home/user/bin

您可以使用此命令创建一个新脚本,并在登录时自动运行它,以在重新启动后重新挂载此绑定。

或者

要永久绑定,请将这些行添加到fstab

# bind my scripts to ~/bin
overlay /home/user/bin overlay defaults,lowerdir=/home/user/my-scripts-directory,upperdir=/home/user/bin,workdir=/home/user/.overlay 0 0

下面的方法我之前用过,但它有一个我没有注意到的缺陷:真实~/bin文件夹的内容变得无法访问。所以我不建议使用它。我找到了上面描述的另一种方法,但我将这个旧方法留在这里,以避免误解我们在评论中讨论的内容。

您可以运行此命令一次性使用(重启后效果消失):
sudo mount --bind ~/my-scripts-directory ~/bin
您可以使用此命令创建一个新脚本,并在登录时自动运行它,以在重启后重新挂载此绑定。
要永久绑定,请将这些行添加到fstab
# bind my scripts to ~/bin
/home/user/my-scripts-directory /home/user/bin none bind 0 0

相关内容