`.sh` 和 `.csh` 之间的区别

n1k*_*1t4 3 software-installation environment-variables intel

我刚刚安装了 Intel Parallel Studio,现在想设置系统变量,以便终端可以找到编译器等。

安装指南中告诉我运行一些包含的设置脚本或将它们包含在我的 bash 配置文件等中。这很酷。

但它总是说,例如:

在使用编译器之前设置环境变量。您可以使用 source 命令来执行 shell 脚本 compilervars。sh或编译器变量。.csh .

然而,它并没有解释这两种变体之间的区别。我也无法在网上其他任何地方找到这两个文件扩展名的任何比较。

我唯一可以推断的是这些.csh文件是特定于 Mac OSX 的,来自以下行:

在 Linux* 和 OS X* 上,该文件是一个名为 compilervars.sh 或 compilervars.csh 的 shell 脚本

在运行任何东西之前,我想知道更多细节。

Dop*_*oti 6

.sh表示 Bourne shell ( sh) 或 Bourne Again shell ( bash)的脚本,它通常是其前身的超集。

.csh表示 C shell ( csh)的脚本,它作为一个 shell,在很大程度上相似,但一旦您开始执行比运行一系列静态命令更复杂的事情,就会有显着的不同。

这两种 shell 通常在任何 POSIXy 环境中都可用,而且实际上它们通常都是预装的,尽管bash(及其表亲sh)在我的经验中更普遍一些。

我在上面说“指示性”,因为文件扩展名的概念在技术上不存在并且没有语义或句法意义。一个文件可以被命名为script.steveor documentation.exeorinclude.h并且实际上仍然是一个 shell 脚本。要获得更明确的确认,请查看文件的第一行。对于设计为直接执行的脚本,它应该以shebang 行开头,该行以octothorpe ( #)、bang ( !) 和应运行脚本的可执行文件的路径开头。例如:

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

或者

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

  • @DexterMorgan `man sh` 不会为您提供默认 shell 的手册。它将为您提供在您的系统上用作 `sh` 的任何 shell 的手册。在基于 Debian 的系统(Debian、Ubuntu、Mint 等)上,默认为“dash”。然而,*你的*默认shell通常设置为`bash`,而不是`sh`。要查看默认用户的 shell 名称,请运行 `echo $SHELL`。 (3认同)
  • 所以本质上:如果你的登录 shell 是一个 `sh` shell(`bash`,`ksh`),就使用 `.sh` 版本,如果你的登录 shell 是一个 `csh` shell,则使用 `.csh` 版本(` csh` 或`tcsh`)。在 macOS 上,现在默认的 shell 是一个 `sh` shell。 (2认同)