我已经制作了一个可执行程序,我已将其目录添加到路径中。它仍然不会执行。是什么赋予了?

我已经制作了一个可执行程序,我已将其目录添加到路径中。它仍然不会执行。是什么赋予了?

我努力了:

gaspipe@kali:~/bashscripts$ ls
./  ../  addpath*  autoinstaller

gaspipe@kali:~/bashscripts$ cd ..

gaspipe@kali:~$ addpath
addpath: command not found

gaspipe@kali:~$ addpath*
addpath*: command not found

gaspipe@kali:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games/home/gaspipe/bashscripts

我遇到的环境变量 man 的问题PATH,在 Linux 中对我来说没有什么比这更困难的了,而且它是一个如此简单的概念。然而,仅仅制作一个将目录添加到路径的脚本对我来说就是一场战斗。
我不想继续打开~/.bashrc文件并输入长路径名。我只想打字addpath <dir>并完成这项工作。

为什么这不是一个已经制定好的程序?

答案1

您的本地文件夹未与 /usr/games 目录分隔:

gaspipe@kali:~$ echo $PATH
...:/bin:/usr/local/games:/usr/games/home/gaspipe/bashscripts

它应该是:

gaspipe@kali:~$ echo $PATH
...:/bin:/usr/local/games:/usr/games:/home/gaspipe/bashscripts

(我剪切了 PATH 的开头以使差异更加明显)。

答案2

如果您想要一个脚本来操作当前 shell 的环境,您必须获取该脚本:

source ./addpath

或者

. ./addpath

或者,您可以创建addpath一个 shell 函数或别名。

当您以通常的方式运行脚本时,当前 shell 将创建一个用于运行该脚本的新进程,并带有当前 shell 环境的副本。该脚本将修改副本,然后在脚本结束时,该进程将终止,修改后的环境将丢失。

另一方面,Shell 函数和别名由当前 shell 执行,因此它们可以轻松修改命令行会话的环境。

答案3

我有一个示例脚本:

$ cd ~/bin
$ cat example
#!/bin/bash
echo Hello

要运行这个,我可以source像 telcoM 的答案一样:

$ source example
Hello

但是,我们将添加可执行权限,以便可以直接执行:

$ ls -l
-rw-r--r-- 1 stew stew 23 Feb 12 10:15 example
$ chmod +x example
$ ls -l
-rwxr-xr-x 1 stew stew 23 Feb 12 10:15 example

现在我们可以通过引用其绝对或相对路径来调用该脚本:

$ ./example
Hello
$ ~/bin/example
Hello

如果您预计很少运行此命令,那么通常就足够了。但如果您经常运行该文件,您可能希望运行可执行文件而不指定其位置。

$PATH通常,我会将此脚本放在已经指向 (ie )的位置/usr/local/bin。这有助于我保持井井有条,因为我的所有自定义脚本都位于同一位置并且可供所有用户使用。

在某些情况下,我喜欢包含特定于用户的脚本,$HOME/bin在这种情况下,我需要将该目录添加到$PATH环境变量中。

PATH我们可以临时为当前命令附加一个目录:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin
$ PATH=$PATH:~/bin example
Hello
$ echo $PATH
/usr/local/bin:/usr/bin:/bin

这不是很有用,因为我们仍在输入目录的路径。它对于通过环境变量设置单次执行的选项最有用。

如果我们希望它持续更长时间(也许我们想在此 shell 会话中多次运行该命令),我们可以为 shell 设置它:

$ PATH=$PATH:~/bin
$ example
Hello
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:~/bin

如果您要在接下来的 10 分钟内多次使用该命令,然后可能再也不会使用该命令,那么这非常有用。但当新终端启动时,此更改将会丢失。

假设您正在使用bash,我们可以通过在 bash 启动时自动设置它来使此更改在会话之间持续存在。以下命令将我的目录添加到我的用户目录中,每当启动bashrc新实例时都会运行该目录:bash

$ echo 'PATH=$PATH:~/bin` >> ~/.bashrc

现在,每当我启动新的 shell 时,我的目录中都会包含该目录,并且无需指定路径PATH即可调用。example请注意,这不会影响系统上的其他用户。

$ example
Hello

:在您的具体问题中,您的主要错误是没有在现有目录$PATH和自定义目录之间添加冒号。

相关内容