将 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: 以便之前搜索它们。如果您在dirA
和dirB
中都有一个可执行文件my_command
,并且您的PATH
是PATH=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脚本中的输入,该脚本是路径中带有空格的目录[重复]