Shell脚本来源的文件扩展名的官方标准/约定


11

我想知道是否要为要而不是运行的shell脚本提供文件类型扩展名的约定。例如:

  1. 如果我想在子shell中运行此脚本。

    ./script.sh 
  2. 如果我想记住从当前shell运行此脚本。

    . script.source 

在第二个示例中,文件类型是否有约定(例如POSIX)?像.source还是.sourceme


更新资料

这个问题不问任何意见。我明确指出,我想知道这种脚本是否存在标准化文件扩展名。与在类似问题上广为接受的问题对于bash脚本使用.sh或.bash扩展名?)相比,该问题甚至更少基于观点。


1
有人认为可以运行一个可执行文件是shell脚本(即它们开始#!/bin/sh或类似的应该没有扩展名,因为用户不应该需要关心什么语言底层剧本写成,
the_velour_fog

1
取决于它的用途,您可以使用env,rc,conf等
123

1
@ 123取决于它,有时一旦您构建了一些有用的东西并将其放进去$PATH,便会一直使用,因此ps,例如ls,,curl和所有其他命令,然后您便开始围绕它构建外壳补全功能,我发现可以删除扩展名。但是,是的,当您采购无法单独执行的shell脚本时,我不会使用chmod +x它们,而是将它们命名script.sh。同样,我经常纯粹是因为没有分配扩展名,因为如果不这样做,我的编辑器就不会突出显示语法。
the_velour_fog '16

5
没有约定。如果您在公司中或正在参与一个共享项目(例如,开源),则可能要遵守当地的标准,但实际上并没有约定。
史蒂芬·哈里斯

1
“约定”一词(含义2)可能导致“基于观点的”答案。开放组规范不强制执行任何命名标准。
杰夫·谢勒

Answers:


18

我会使用.sh(对于POSIX sh语言的文件,.bash对于不与sh兼容的bash文件,即扩展名标识编写脚本的语言)用于要获取(或更通常不希望执行)的文件,并没有要执行的文件扩展名。

您还可以添加:

#! /bin/echo Please-source

she-bang,因此当错误执行时(尽管我希望这些文件不应该被授予执行权限,否则将阻止执行),您会注意到应该改为源文件。


您也可以退出,如果脚本不来源(stackoverflow.com/q/2683279/4694621
Mateusz Piotrowski的

4

对于源文件,我认为最好的方法是.conf用于配置脚本的文件,.shlib或.shlibs用于具有功能或其他实用程序的文件。

如果您想防止脚本使用错误的shell运行,而hashbang不足以满足您的需求,则可以使用以下命令:

if [ "$(readlink "/proc/$$/exe")" != "/bin/bash" ]; then
      echo >&2 "CAUTION: Wrong interpreter detected. You must use bash."
      exit 1
fi

1
如果您要使用特定于Linux的操作系统/proc/$$/exe,那么不妨这样做case $(readlink "/proc/$$/exe") in */bash)...,尽管在这里,我只是使用:if [ -z "$BASH_VERSION" ]。(echo应该是echo >&2)。(我喜欢您.conf.shlibs(但对于sh文件而言)扩展名,尽管它可能对依赖该扩展名的语法突出显示没有帮助)。
斯特凡Chazelas

是的,我以某种我下载的程序看到了这个.shlibs,但是我不记得了,所以我开始使用它。非常感谢您的提示,我将使用readlink版本更漂亮地编辑问题。;-)
Luciano Andress Martini

@StéphaneChazelas语法突出显示可能是通过文件本身中的元数据触发的(Emacs和Vim至少是这样),因此文件名扩展名的选择与此无关。
库沙兰丹
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.