存储 shell 脚本的良好常见做法是什么? (bash、sh、...)
目前,我的$HOME
目录中有一些 bash 和 sh 脚本
我用以下方式调用它们
$ bash $HOME/script1.bash arg1, arg2, ...
或者
$ sh $HOME/script2.sh arg1, arg2, ...
我可以将它们存储在某个标准位置并将它们作为普通应用程序(例如ls
,,,pwd
...)调用吗?例如
$ script1 arg1, arg2, ...
$ script2 arg1, arg2, ...
对于高级 Linux 用户来说,常见的做法是什么?
答案1
您可以将脚本存储在文件系统中它们所属的位置,并bin
在您的主目录中创建一个目录。添加
if [ -d "$HOME/bin" ] ; then
export PATH="$HOME/bin:$PATH"
fi
让.bashrc
任何可执行文件都可以被~/bin
发现。最后,您只需在目录中添加文件即可。您可以使用符号链接指向您想要在 中发现的任何脚本~/bin
,这使您可以虚拟地更改脚本的名称并将其保留在文件系统上您想要的位置。举个例子,对于一个文件my_script.sh
,首先确保该文件是可执行的
chmod u+x my_script.sh
然后创建一个符号链接
ln -s my_script.sh ~/bin/my_script
在专用文件夹中。请注意,为了方便起见,扩展已被删除。您现在可以使用命令从任何地方运行脚本my_script
。您不必在每次编辑原始my_script.sh
文件时都创建符号链接。
编辑 :要通过某种解释器使任何文本文件可执行,您可以使用舍邦。对于 bash 脚本,这意味着添加
#!/bin/bash
作为文件的第一行。请注意,该技术不仅限于 bash 脚本,还适用于 python,例如使用
#!/usr/bin/env python
笔记 :我个人根据个人喜好使用~/.local/bin
if ,但大多数人使用直接位于其家中的目录,而不是隐藏的目录。许多发行版直接集成它,例如 debian 或 ubuntu 会自动在存在的情况下添加这样的目录(在它们附带的默认文件中)。我的选择是基于许多软件已经使用的事实,我认为它是一个配置工具而不是一组真实的文件(仅符号链接),并且我不希望这个文件夹扰乱完成。~/bin
bin
PATH
.profile
.local/share
答案2
此类脚本的通用路径是$HOME/bin
.如果这样的路径不在 中$PATH
,您应该添加
PATH=$HOME/bin:$PATH
到您的.profile
、.bash_profile
、 或.bashrc
文件。
答案3
将 shell 脚本作为真正的程序进行管理有几个步骤。
打开脚本的可执行模式:
chmod +x myscript.sh
使用解释器字符串(由
#!
“hash-bang”表示)启动脚本,该字符串告诉系统如何运行脚本(默认是 shell 脚本,但不要依赖它)。#!/bin/bash
将您的脚本(以及已编译的程序,这没有区别)收集到一个目录中,并将该目录放入您的执行中
PATH
。您自己的脚本的习惯位置是$HOME/bin
,但这实际上取决于您。将其放入您的未来 shell 中将完全按照它们找到或的
~/.profile
方式找到您的脚本。 (当然,除非后者是别名:-))ls
make
export PATH="$HOME/bin:$PATH"
Unix 与 Windows 不同,不会忽略可执行文件的扩展名。如果您的脚本被称为
myscript.sh
,您必须键入myscript.sh
才能运行它。因此,将其重命名为myscript
-- 源代码的第一行告诉您它到底是什么类型的脚本。mv myscript.sh myscript
myscript
现在是一个完全普通的命令,您可以像其他命令一样运行它。如果它的名称与您的 中已有的可执行文件的名称相同PATH
,那么它将优先,因为我们把它放在第一位$HOME/bin
。 (如果您愿意,可以将其放在最后。)
答案4
是的,可以对其进行设置,以便您可以通过名称调用脚本,而不管您的工作目录如何。
脚步
- 确保目录中的文件可执行
chmod
- 如果它是脚本而不是二进制可执行文件,请确保脚本以适当的开头舍邦。
- 确保包含该文件的目录位于
PATH
.- 但首先要确保它是一个合适的目录(请参阅下一节)
- 如果您希望通过简单的命令名称来访问脚本,请删除文件扩展名或在目录中创建具有所需名称的符号链接。
- 这是完全可选的
- 要创建符号链接:
ln -s origfile linkname
放置脚本的位置
现在,您应该将可执行文件放在哪个目录中?最终,这取决于您希望脚本在系统上的可见程度:
- 如果您是系统管理员并且想要每个人为了能够运行脚本,请将它们放在
/usr/local/bin
.- 该目录已
PATH
默认存在于许多系统中
- 该目录已
- 如果您希望只有您可以访问它们,请将它们放在
~/bin
.
另一篇文章提供了一些关于可执行脚本和二进制文件应放置在何处的主题的有用信息:我如何知道在 Linux 中把东西放在哪里?。