bash - 什么是 Bash 文件扩展名?

标签 bash shell

我在文本编辑器中编写了一个 bash 脚本,我应该将我的脚本保存为什么扩展名以便它可以作为 bash 脚本运行?我创建了一个理论上应该启动 ssh 服务器的脚本。我想知道如何在单击脚本后执行脚本。我正在运行 OS X 10.9.5。

最佳答案

不同意其他答案,对于 shell 脚本使用 .sh 扩展名是一个常见的约定——但这不是一个有用的约定。最好根本不要使用扩展名。能够分辨出 foo.sh 是一个 shell 脚本的好处是因为它的名字是最小的,而且你为此付出了灵 active 的损失。

要使 bash 脚本可执行,它需要有一个 shebang顶部的行:

#!/bin/bash

并使用chmod +x命令让系统识别为可执行文件。然后需要将它安装在 $PATH 中列出的目录之一中。如果脚本名为 foo,则您可以在 shell 提示符下键入 foo 来执行它。或者,如果它在当前目录中(临时脚本常见),您可以键入 ./foo

shell 和操作系统都不会注意文件名的扩展部分。这只是名字的一部分。通过给它一个特殊的扩展名,你可以确保任何使用它的人(无论是用户还是其他脚本)都不必关心它是如何实现的,无论它是一个 shell 脚本(sh, bash、csh 或其他)、Perl、Python 或 Awk 脚本,或二进制可执行文件。该系统经过专门设计,因此可以在不知道或不关心其实现方式的情况下调用解释脚本或二进制可执行文件。

类 UNIX 系统从纯文本命令行界面开始。后来添加了 KDE 和 Gnome 等 GUI。在 GUI 桌面系统中,您通常可以运行程序(同样,无论是脚本还是二进制可执行文件),例如,双击引用它的图标。通常,这会丢弃程序可能打印的任何输出,并且不允许您传递命令行参数;它比从 shell 提示符运行它要灵活得多。但对于某些程序(主要是 GUI 客户端)来说,它可能更方便。

最好从命令行学习 Shell 脚本,而不是从 GUI。

(一些工具注意文件扩展名。例如,编译器通常使用扩展名来确定代码编写的语言:.c 用于 C, .cpp 用于 c++ 等。此约定不适用于可执行文件。)

请记住,UNIX(和类 UNIX 系统)不是 Windows。 MS Windows 通常使用文件的扩展名来确定如何打开/执行它。二进制可执行文件需要有 .exe 扩展名。如果你在 Windows 下安装了类 UNIX 的 shell,你可以配置 Windows 将 .sh 扩展名识别为 shell 脚本,并使用 shell 打开它; Windows 没有 #! 约定。

关于bash - 什么是 Bash 文件扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27813563/

相关文章:

linux - 带引号的 sudo 命令行为

bash - 如何检测当前正在 Linux 中播放的声音?

python - Python 中等效的 Linux shell 源命令

linux - 字符串在每个变量后重新开始 [Bash]

macos - 在 Mac OS X 中忽略 xargs 的空结果

arrays - 关联数组中的错误数组下标错误

bash - 如何从 ~/.bashrc 中删除错误的链接?

python - Crontab 在树莓派上启动 python 脚本导致导入错误

c - 使用 `kill` 触发 parent 的 `waitpid`

java - 我应该使用哪个 Eclipse 来使用 Java、C、Bash 和 Perl?