存储 shell 脚本

xra*_*alf 16 shell shell-script

存储 shell 脚本的常见做法是什么?(bash, sh, ...)

现在,我有我的几个bash和sh脚本$HOME目录

我调用它们

$ bash $HOME/script1.bash arg1, arg2, ...
Run Code Online (Sandbox Code Playgroud)

或者

$ sh $HOME/script2.sh arg1, arg2, ...
Run Code Online (Sandbox Code Playgroud)

我可以将它们存储在某个标准位置并像ls, pwd, ...这样的普通应用程序一样调用它们吗?例如

$ script1 arg1, arg2, ...
$ script2 arg1, arg2, ...
Run Code Online (Sandbox Code Playgroud)

对于高级 linux 用户,这里的常见做法是什么?

Vin*_*ers 20

您可以将脚本存储在它们属于文件系统的位置,并bin在您的家中创建一个目录。添加

if [ -d "$HOME/bin" ] ; then
    export PATH="$HOME/bin:$PATH"
fi
Run Code Online (Sandbox Code Playgroud)

在您.bashrc使任何可执行文件放置在可~/bin发现中。最后,您只需要在目录中添加文件即可。您可以使用符号链接指向您想要在 中发现的任何脚本~/bin,这允许您虚拟地更改脚本的名称并将其保留在文件系统中您想要的位置。举个例子,对于一个文件my_script.sh,首先要确保该文件是可执行的

chmod u+x my_script.sh
Run Code Online (Sandbox Code Playgroud)

然后创建一个符号链接

ln -s my_script.sh ~/bin/my_script
Run Code Online (Sandbox Code Playgroud)

在专用文件夹中。请注意,为方便起见,已删除扩展名。您现在可以使用命令从任何地方运行您的脚本my_script。您不必每次编辑原始my_script.sh文件时都创建符号链接。

编辑:要通过某个解释器使任何文本文件可执行,您可以使用shebang。对于 bash 脚本,这意味着添加

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

作为文件的第一行。请注意,该技术不仅限于 bash 脚本,还适用于 python,例如使用

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

注意:我个人使用~/.local/binif~/bin作为个人偏好,但大多数人使用bin直接位于他们家中的目录,而不是隐藏的。许多发行版直接集成了它,例如 debian 或 ubuntu,它们会自动添加这样一个目录(PATH如果它存在的话)(在.profile它们提供的默认文件中)。我的选择是基于许多软件已经使用的事实,.local/share我认为它是一个配置工具而不是一组真实的文件(只有符号链接),而且我不希望这个文件夹弄乱完成。

  • 什么决定“它们在我的文件系统中的位置”? (3认同)
  • 大部分都是很好的建议,但为什么要把你的垃圾箱藏在`.local`中呢?这些东西的标准位置是`$HOME/bin`。 (2认同)

cho*_*oba 9

此类脚本的通用路径是$HOME/bin. 如果这样的路径不在 中$PATH,你应该添加

PATH=$HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

.profile.bash_profile或者.bashrc文件。


ale*_*xis 6

将您的 shell 脚本作为真正的程序进行管理有几个步骤。

  1. 为您的脚本打开可执行模式:

    chmod +x myscript.sh
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用解释器字符串(由#!“hash-bang”表示)启动您的脚本,该字符串告诉系统如何运行您的脚本(默认为 shell 脚本,但不要依赖它)。

     #!/bin/bash
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将您的脚本(连同已编译的程序,没有区别)收集在一个目录中,并将该目录放入您的执行中PATH。您自己的脚本的习惯位置是$HOME/bin,但这真的取决于您。

    把它放在你的~/.profile和未来的 shell 中会完全按照它们找到的方式找到你的脚本lsmake. (除非后者是别名,当然:-))

    export PATH="$HOME/bin:$PATH"
    
    Run Code Online (Sandbox Code Playgroud)
  4. Unix 与 Windows 不同,不会忽略可执行文件的扩展名。如果您的脚本名为myscript.sh,则您必须键入myscript.sh才能运行它。因此,将其重命名为myscript-- 源代码的第一行告诉您无论如何它是哪种脚本。

    mv myscript.sh myscript
    
    Run Code Online (Sandbox Code Playgroud)

myscript现在是一个完全普通的命令,你可以像其他任何东西一样运行。如果它被命名为同一个可执行文件已经在你的PATH,因为我们把它将优先$HOME/bin第一。(如果你愿意,你可以把它放在最后。)