将文件从 myFile.sh 重命名为 myFile.bash?

将文件从 myFile.sh 重命名为 myFile.bash?

第1部分 好的,我正在使用 Mac,并且我从一个名为...的文件开始。

例子:myFile.sh

在终端中,我通过输入以下内容在其目录中运行此文件......

bash myFile.sh

这很完美,但是后来我对 bash 与 sh 进行了一些研究,发现我也可以这样写......

sh myFile.sh

这也奏效了。我做了一些研究,然后想到了一个主意,因为 bash 是“较新”的做事方式,我想我会尝试重命名,myFile.sh看看myFile.bash如果我输入以下内容,它是否仍会在终端中运行...

bash myFile.bash

而且它运行得很好!但现在我想知道文件最初被命名myFile.shmyFile.bash

myFile.bash那么,我将其重命名为而不是是不是不好myFile.sh?还是完全没问题?

(我对终端命令还不熟悉)

第2部分

另一个问题:我该如何使这个“myFile.sh”可执行?这是以下 myFile.sh 的内容:

#!/bin/bash 
python runtime/recompile.py "$@"

注意:我做了一些研究,并尝试将 myFile.sh 重命名为 myFile.command,这应该使它在我打开文件时可执行,但它不起作用,并且我在终端中收到此错误:

python: can't open file 'runtime/recompile.py': [Errno 2] No such file or directory

所以我的问题确实是:

a) 如何使 myFile.sh 在终端中可执行?b) 为什么不能将 myFile.sh 重命名为 myFile.command?

任何帮助均感激不尽。

答案1

没问题,它可以在不同扩展名下工作,也可以在没有扩展名的情况下工作。文件扩展名在 Unix 中毫无意义(参考:http://developers.sun.com/solaris/articles/korn_shell.html)。扩展名有助于人们快速识别文件。

您可能应该使用.sh扩展,因为它比更流行并且更短.bash

答案2

您可能应该使用并使这些文件可执行,chmod +x filename并在第一行(shebang)中指定脚本解释器:

#!/bin/bash

或者,尊重$PATH

#!/usr/bin/env bash

这样,文件本身就指定了要使用的脚本解释器。您甚至可以bash为此指定参数。如果您需要将配置应用于脚本中的登录 shell,则可以执行以下操作:

#!/bin/bash --login

使用自定义文件扩展名(例如).bash可能会破坏不明显的进程,例如如果您还使用 Windows 系统,则 FTP 文件传输:许多 FTP 程序将具有特定扩展名的文件视为文本,从而更改行尾。如果您对脚本使用非标准文件扩展名,则不会发生这种情况,并且\r将保留 Windows 中的(回车)字符。


重命名为.command可能不起作用,因为您的工作目录随文件执行方式而改变。它将始终在 中执行$HOME,例如/Users/danielbeck,并且相对路径需要从那里开始。提供绝对路径更安全。


如果你不需要终端窗口来执行程序,你也可以使用自动机和它的运行 Shell 脚本创建应用程序或服务的操作,后者可以使用可选的键盘快捷键系统偏好设置 » 键盘 » 键盘快捷键 » 服务

您需要配置服务才能接收任何应用程序中的文件和文件夹作为输入,并在选择文件时执行它;如果它是一个应用程序,您可以将文件拖放到它上面。无论如何,配置运行 Shell 脚本接收输入的动作作为参数

答案3

可执行 shell 脚本的第一行应该是“舍邦“;该#!序列是一个“神奇数字”,它告诉系统该行的其余部分指定了一个解释器,它将向该解释器传递脚本的名称。

例如,如果您有一个名为“foo”(不需要后缀)的文件,如下所示:

#!/bin/sh

echo This is foo

并且你已经运行了chmod +x foo(这很重要!),那么这个:

./foo

相当于这样:

/bin/sh ./foo

并将产生输出This is foo

例如,如果您想强调它是 shell 脚本,则可以将其命名为foo.sh,但这不是必需的。(通常,用户没有理由关心它是如何实现的;在这种情况下,您可以直接将其命名为foo,它可以是 shell 脚本、Perl 或 Python 脚本或已编译的可执行文件。)

#!/bin/sh那么和之间有什么区别呢#!/bin/bash?在大多数情况下,它们是可以互换的。 /bin/sh通常是 Bourne Shell,它可以追溯到 Unix 的早期;您可以在所有类 Unix 系统上找到它的版本,包括 Linux 和 MacOS。 /bin/bash是 GNU“Bourne-Again Shell”,它包括标准 Bourne shell 功能以及许多扩展。

如果您仅使用 Bourne shell 支持的功能,那么最好#!/bin/sh仅将其作为风格问题来使用,这样您的脚本就更有可能在其他系统(可能未安装 Bash)上无需更改即可运行。

如果您使用 Bash 特定功能,则需要使用#!/bin/bash

相关内容