如何使Shell脚本成为全局脚本?


82

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

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

另外,任何有关学习更多有关Shell脚本的资源的建议都将有所帮助。谢谢


1
首先阅读有关PATH环境变量的信息,然后更新问题。
S.Lott

Answers:



44

传统上,此类脚本要么进入~/bin(即您的主目录中的bin目录),要么/usr/local/bin/前者意味着该脚本仅对您有效,后者意味着您希望系统上的任何人都可以运行的脚本。

如果放在中~/bin,则可能需要将其添加到PATH环境变量中。/usr/local/bin应该已经在路上了。


30

有两种方法可以做到这一点-

  1. 将您的脚本放在usr / local / bin中,并确保其可执行文件(chmod + x my_script)(此路径已设置,您可以通过执行echo $ PATH进行检查)
  2. 在您的主目录中创建一个名为bin的文件夹。(对于您的个人脚本)
    • cd〜(将您带到主目录)
    • mkdir bin(创建一个bin文件夹)
    • vim .bash_profile(设置路径环境变量)
    • 导出PATH =〜/ bin:$ PATH(按i,然后添加此行,然后执行esc并键入:wq)
    • 现在,您可以键入脚本的名称,然后从所需的任何位置运行它。

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


4

在Mac操作系统中

  • 打开bash〜/ .bashrc文件。
  • 使用export PATH =“ $ PATH:/Users/sher.mohammad/Office/practice/practiceShell”在bashrc文件中添加脚本的 路径
  • 打开〜。/ bash_profile文件,并添加[[-s〜/ .bashrc]] &&源〜/ .bashrc
  • 打开新的终端窗口现在,无论何时打开终端,脚本都会被加载

为什么不直接放进.bash_profile去呢?这要简单得多(而且源.bashrc的东西对我来说从来没有用过)。
szeitlin

我研究发现,登录时执行bash_profile,bashrc用于非登录shell,默认情况下OS X像登录shell并加载bash_profile,因此在bash_profile中添加将可以正常工作,如果在bashrc中编写,则可以添加[[- s〜/ .bashrc]] &&在bash_profile中添加〜/ .bashrc,以在登录时运行bash_profile时加载bashrc
Sher Mohammad

4

如果您熟悉您的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自动完成!
米兰,

2

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

现在,通过外壳程序中的函数调用执行脚本。


1

将其保存在/usr/bin(或中存在的任何其他目录PATH)或进行编辑PATH以包括保存在其中的目录,基本上都会使其在任何目录中运行。


7
/usr/bin可以在操作系统升级期间完全清空并替换,从而使脚本神秘地消失。/usr/local/bin如布赖恩·奥克利(Bryan Oakley)所述。另请参阅文件系统层次标准
斯蒂芬·P

0

从“ script.sh”的工作目录中“ mv [script.sh] / usr / local / bin”(未经测试,但似乎是最简单的IMO方法。)


1
您可能需要sudo mv script.sh /usr/local/bin,因为如果没有升级权限,该目录是不可写的。
佩雷特

-2

您应该将其放在计算机上的全局可执行目录中。我认为通常是/usr/bin在基于Unix的操作系统上使用(但是,这通常需要在该计算机上具有超级用户特权)。

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

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


9
我会拒绝投票,因为/ usr / bin是错误的答案。/ usr / local / bin是专门为“本地”脚本设计的(即:您创建的脚本而不是系统随附的脚本)。
布莱恩·奥克利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.