假设我已经编译了一些东西并且像这样运行它:
$ /path/to/my/executable/mycmd
Hello World
我需要做什么才能运行它
$ mycmd
Hello World
来自我计算机中的任何地方?
答案1
您正在寻找的是PATH
环境变量。它告诉 shell 需要在哪里寻找程序。您可以使用以下命令查看该变量的当前值echo
:
echo "$PATH"
现在...如果您想使用某些新程序,最佳实践是使用您的发行版的包管理程序来安装它。但在这种情况下,我假设您正在处理一个不是由任何可用软件包提供的程序。对于此类程序,您有两种选择:
- 在系统范围内安装该程序,安装在系统所在的位置不是放置从包安装的任何文件。在大多数系统上,此类“安全”文件夹包括
/usr/local/bin/
和/opt/bin/
- 这些文件夹应该已经位于您的PATH
. (查看这些文件夹里面,如果里面有很多文件,那就是错误的放置您自己的程序的地方,您必须查看 中列出的其他文件夹PATH
。) 修改你的
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