【问题标题】:How to make a shell script global?如何使 shell 脚本全局化?
【发布时间】:2011-04-03 09:14:30
【问题描述】:

我使用的是 Mac 的 OS 10.6,我正在尝试学习有关 shell 脚本的一两件事。我了解如何保存 shell 脚本并使其可执行,但我想知道我能做什么或者我可以在哪里保存文件以使其成为全局文件(也就是说,无论我在哪个文件夹中都可以访问)。

例如,如果我将 .sh 文件保存在 /Users/username/ 目录中并使其可执行,则我只能在该特定目录中执行该脚本。例如,如果我导航到 /Users/username/Downloads,我将无法执行脚本。

此外,任何有关了解更多有关 shell 脚本的资源的建议都会有所帮助。谢谢

【问题讨论】:

  • 先阅读PATH环境变量,然后更新问题。

标签: macos shell unix


【解决方案1】:

/usr/local/bin 将是最合适的位置。 Mac OS X 默认在PATH 中有它

【讨论】:

  • 宾果游戏!谢谢:)
【解决方案2】:

传统上,这样的脚本要么放在~/bin(即:你的主目录中的bin目录)要么放在/usr/local/bin/中能够运行。

如果你把它放在~/bin 中,你可能需要把它添加到你的PATH 环境变量中。 /usr/local/bin 应该已经在路径上。

【讨论】:

    【解决方案3】:

    有两种方法-

    1. 把你的脚本放在 usr/local/bin 并确保它是可执行的(chmod +x my_script)(这已经在路径中设置好了,你可以通过 echo $PATH 来检查)
    2. 在您的主目录中创建一个名为 bin 的文件夹。 (用于您的个人脚本)
      • cd ~(带你到你的主目录)
      • mkdir bin(创建 bin 文件夹)
      • vim .bash_profile(设置路径环境变量)
      • export PATH=~/bin:$PATH(按 i 然后添加此行,然后执行 esc 并输入 :wq)
      • 现在您只需键入脚本的名称,然后从任何您想要的地方运行它。

    ** 注意:如果您想使用缩短的命令而不是输入整个文件名来运行脚本,请将以下内容添加到您的 .bash_profile:
    alias myscript='my_script.sh'
    然后,您只需键入myscript 即可运行该脚本。 (你可以使用任何你喜欢的别名)

    【讨论】:

    • 由于您现在可能正在使用 zsh,您可能希望采用不同的方法。通过使用内容 /Users/<some-username>/bin 创建文件 /etc/paths.d/MyScripts 将您的个人 bin 目录添加到路径
    【解决方案4】:

    在mac操作系统中

    • 打开 bash ~/.bashrc 文件。
    • 在 bashrc 文件中添加脚本的路径,使用 export PATH="$PATH:/Users/sher.mohammad/Office/practice/practiceShell"
    • 打开您的 ~./bash_profile 文件并添加 [[ -s ~/.bashrc ]] && source ~/.bashrc
    • 打开新的终端窗口 现在,只要您打开终端,您的脚本就会被加载

    【讨论】:

    • 为什么不直接放到.bash_profile呢?这要简单得多(而且那个源 .bashrc 对我来说从来没有用过)。
    • 我研究发现 bash_profile 是在你登录时执行的,bashrc 用于非登录 shell,OS X 默认像登录 shell 和加载 bash_profile ,所以添加 bash_profile 会正常工作,如果你写在 bashrc 中,您已在 bash_profile 添加 [[ -s ~/.bashrc ]] && source ~/.bashrc ,以便在登录时运行 bash_profile 时加载 bashrc
    【解决方案5】:

    如果您熟悉您的 bashrc 文件,这将非常简单!这将完全使用您的 .bashrc 文件,并且需要 2 秒才能完成。

    (我使用 Arch Linux Manjaro,所以我使用位于我的主目录中的 .bashrc)

    要放置在 .bashrc 文件中的代码:

    # Simple bashrc method to launch anything in terminal from any directory
    
    YOURCOMMAND () {
      cd /path/to/directory/containing/your/script/ && ./YOURSCRIPT
    }
    

    如您所见,首先您使用简单的“cd”命令并将脚本所在的目录提供给它,然后使用“&&”以便您可以立即执行下一个命令,最后打开您的脚本像往常一样!超级简单,直接保存在您的 .bash 文件中! :)

    希望我帮助了某人!

    此致,

    匿名X

    【讨论】:

    • 这太棒了...它允许我的 zsh 自动完成!
    • 但是如果你有不同的脚本呢?
    【解决方案6】:

    在使用 bash shell 时,将该脚本编写为函数,然后将其放入 .bashrc 或通过“源文件名”获取包含该函数的文件

    现在通过shell中的函数调用来执行脚本。

    【讨论】:

      【解决方案7】:

      将其保存在/usr/bin(或PATH 中存在的任何其他目录)或编辑PATH 以包含您保存它的目录基本上可以使其在任何目录中运行。

      【讨论】:

      • /usr/bin 可以在操作系统升级期间完全清空和替换,从而使您的脚本神秘地消失。正如 Bryan Oakley 所述,/usr/local/bin 就是为此目的。另见Filesystem Hierarchy Standard
      【解决方案8】:

      来自 'script.sh'" mv [script.sh] /usr/local/bin"的工作目录(未经测试,但似乎是 IMO 最简单的方式。)

      【讨论】:

      • 您可能需要sudo mv script.sh /usr/local/bin,因为该目录在没有升级权限的情况下是不可写的。
      【解决方案9】:

      你应该把它放在你机器上的全局可执行目录中。我认为在基于 Unix 的操作系统上通常是 /usr/bin(然而,这通常需要该机器上的超级用户权限)。

      您也可以将它放在 $PATH 环境变量中的任何其他目录中,尽管它仅适用于在该变量中具有该目录的用户。

      您可以通过在 shell 中键入 echo $PATH 来找到 $PATH 的值。目录由 :分隔。

      【讨论】:

      • 我要投反对票,因为 /usr/bin 是错误的答案。 /usr/local/bin 是专门为“本地”脚本设计的(即:你创建的,而不是系统自带的)。
      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 2011-03-19
      • 2010-11-30
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      相关资源
      最近更新 更多