【问题标题】:Add a bash script to path将 bash 脚本添加到路径
【发布时间】: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 编程的新手,所以我很欣赏这些改进我的代码的建议。

标签: linux bash shell path


【解决方案1】:

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

PATH=$MYDIR:$PATH

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

PATH=/Users/username/bin:$PATH

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

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

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

【讨论】:

【解决方案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://stackoverflow.com/a/20054809/6311511)提出的解决方案,更改文件夹“~/bin”中文件的权限。你可以使用这个:

    chmod -R 755 ~/bin
    

    【讨论】:

      猜你喜欢
      • 2017-08-11
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 2014-04-18
      • 1970-01-01
      • 2013-11-28
      相关资源
      最近更新 更多