我在文本编辑器中编写了一个bash脚本,我将脚本保存为什么扩展名,因为它可以作为bash脚本运行?我创建了一个理论上应该启动ssh服务器的脚本.我想知道如何在我点击它之后使脚本执行.我正在运行OS X 10.9.5.
Kei*_*son 80
不同意其他答案,使用.sh
shell脚本的扩展有一个共同的约定- 但它不是一个有用的约定.最好不要使用扩展名.能够告诉它foo.sh
是一个shell脚本的优点是因为它的名字很小,而且你为它付出了代价而失去了灵活性.
要使bash脚本可执行,它需要在顶部有一个shebang行:
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
并使用该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没有#!
约定.
Bas*_*tch 15
您不需要任何扩展(或者您可以选择任意扩展,但这.sh
是一个有用的约定).
您应该启动脚本#!/bin/bash
(第一行由execve(2) syscall 理解),并且您应该使您的文件可执行chmod u+x
.因此,如果您的脚本在某个文件中$HOME/somedir/somescriptname.sh
,则需要输入一次
chmod u+x $HOME/somedir/somescriptname.sh
Run Code Online (Sandbox Code Playgroud)
在一个终端.有关命令,请参阅chmod(1),对于系统调用,请参阅chmod(2).
除非您输入整个文件路径,否则应该将该文件放在您提到的某个目录中PATH
(请参阅environ(7)&execvp(3)),~/.bashrc
如果您的登录shell是,则可以永久设置在该目录中bash
)
顺便说一下,你可以用其他语言编写你的脚本,例如用Python开始编写脚本#!/usr/bin/python
,或者用Ocaml 编写你的脚本#!/usr/bin/ocaml
...
通过双击(关于你没说的内容!)执行你的脚本是一个桌面环境问题,可能是桌面特定的(可能与Kde,Mate,Gnome,....或IceWM或RatPoison不同).也许阅读EWMH规范可能会帮助您获得更好的图片.
也许让你的脚本可执行chmod
可能使它可以在你的桌面上点击(显然,MacOSX上的Quartz).但是你可能应该让它给出一些视觉反馈.
并且有几台计算机没有任何桌面,包括您使用ssh远程访问它时的桌面.
我不相信通过单击运行shell脚本是个好主意.您可能希望能够为shell脚本提供参数(以及如何通过单击?来执行此操作),并且您应该关心它的输出.如果您能够编写shell脚本,则可以在终端中使用交互式shell.这是使用脚本的最佳和最自然的方式.良好的交互式shell(例如zsh或fish或者最近的版本bash
)具有美味且可配置的自动完成功能,您不必输入很多(学会使用tab键盘的键).此外,脚本和程序通常是复合命令(管道等)的一部分.
PS.我从1986年开始使用Unix,自1993年开始使用Linux.我从未通过点击开始自己的程序或脚本.我为什么要?
只是.sh
。
像这样运行脚本:
./script.sh
Run Code Online (Sandbox Code Playgroud)
编辑:就像阿努巴瓦所说,扩展并不重要。但出于组织原因,仍然建议使用扩展。