我努力了:
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
和自定义目录之间添加冒号。