将 bash 脚本添加到路径

Posted

技术标签:

【中文标题】将 bash 脚本添加到路径【英文标题】:Add a bash script to path 【发布时间】:2013-12-02 00:02:32 【问题描述】:

我想在 linux PATH 中添加一个小脚本,这样我就不必在它物理放置在磁盘上的位置实际运行它。

脚本很简单,就是通过代理提供 apt-get 访问权限,我是这样设计的:

#!/bin/bash
array=( $@ )
len=$#array[@]
_args=$array[@]:1:$len
sudo http_proxy="http://user:password@server:port" apt-get $_args

然后我将其保存为 apt-proxy.sh,将其设置为 +x (chmod),当我在放置此文件的目录中时,一切正常。

我的问题是:如何将此 apt-proxy 添加到 PATH 以便我实际上可以将其称为真正的 apt-get ? [从任何地方]

寻找仅限命令行的解决方案,如果您知道如何通过 GUI 进行操作,那很好,但 不是我要找的

【问题讨论】:

sudo ... apt-get "$@:2" 可能比尝试构建第二个数组更简单、更健壮。 根据您的需求/选项,将PATH 指向脚本(已在答案中详细说明)或将脚本移动到已经可用的位置都将达到预期的结果。我通常会在/usr/local/bin 中放一个脚本。 感谢@chepner,我是 bash 编程的新手,所以我很欣赏这些改进我的代码的建议。 【参考方案1】:

您想将该 目录 定义为路径变量,而不是实际的二进制文件,例如

PATH=$MYDIR:$PATH

其中MYDIR 定义为包含二进制文件的目录,例如

PATH=/Users/username/bin:$PATH

你应该把它放在你的启动脚本中,例如.bashrc 以便在每次调用 shell 进程时运行。

请注意,顺序很重要,并且会评估 PATH,以便如果在路径变量的较早条​​目中找到与您的名称匹配的脚本,那么您将执行该脚本。所以您可以将您的脚本命名为apt-get 并将其放在路径的前面。我不会这样做,因为它令人困惑。您可能想改为调查 shell 别名。

我还注意到您说它在您当前的目录中运行良好。如果您的意思是您的路径中有当前目录 (.),那么这是一个潜在的安全风险。有人可以将一些常用实用程序的木马变种(例如ls)放在一个目录中,然后将您带到cd to 该目录并无意中运行它。

【讨论】:

您可能想看看unix.stackexchange.com 和superuser.com 上的这两个详细答案【参考方案2】:

试试这个:

将脚本另存为apt-proxy(不带.sh 扩展名)在某个目录中,例如~/bin。 将~/bin 添加到您的PATH,输入export PATH=$PATH:~/bin 如果您永久需要它,请在您的~/.bashrc 中添加最后一行。如果您使用的是zsh,请将其添加到~/.zshrc。 然后您可以使用您的参数运行apt-proxy,它会在任何地方运行。

请注意,如果您在特定窗口中export PATH 变量,它将不会在其他 bash 实例中更新。

【讨论】:

您不需要导出PATH,因为它(很可能)已经标记为已导出。此外,最好将您的个人路径添加,而不是将它们附加到现有的PATH @gniourf_gniourf 为什么添加前缀更好? @compguy24: 以便之前搜索它们。如果您在dirAdirB 中都有一个可执行文件my_command,并且您的PATHPATH=dirA:dirB,那么将首先找到dirA 中的那个,因此它将运行dirA/my_command .通常,个人的旨在覆盖系统范围的;这就是为什么通常最好在PATH 之前添加您的个人信息。 请注意,zsh 可能无法正确识别~。您可以使用绝对路径或$HOME【参考方案3】:

在 ~/.bash_profile 文件中为可执行文件创建一个别名,然后在任何地方使用它,或者您可以从任何地方获取包含您需要运行的可执行文件的目录,这将为您解决问题。

【讨论】:

【参考方案4】:

最后一步,按照@jlhonora(https://***.com/a/20054809/6311511)提出的解决方案,更改文件夹“~/bin”中文件的权限。你可以使用这个:

chmod -R 755 ~/bin

【讨论】:

以上是关于将 bash 脚本添加到路径的主要内容,如果未能解决你的问题,请参考以下文章

读取bash脚本中的输入,该脚本是路径中带有空格的目录[重复]

如何将文件路径作为 bash 脚本中的参数传递给函数? [复制]

Bash 脚本:识别拖放到 konsole 的路径

如何在linux环境下添加python模块路径

从用户获取输入到包含空格的路径(bash脚本)[重复]

删除功能仍然可用