c shell 和bash有啥区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c shell 和bash有啥区别相关的知识,希望对你有一定的参考价值。
最重要的区别是 C shell 有一部分语法是基于 C 语言的,而 Bash 是原始的 Shell Script。你可以通过它们的提示符来区分,Bash 的是 '$' 而 Csh 的是 '%'。
Bash 的基本语法在 POSIX 中有定义,而 Csh 不是 POSIX 的一部分。 参考技术A C shell的语法和 C语言的很相似
Windows 10 上的 Bash 和 Ubuntu 终端有啥区别
【中文标题】Windows 10 上的 Bash 和 Ubuntu 终端有啥区别【英文标题】:What is the difference between Bash and Ubuntu terminals on Windows 10Windows 10 上的 Bash 和 Ubuntu 终端有什么区别 【发布时间】:2018-06-22 12:05:55 【问题描述】:我最近安装了适用于 Windows 的 Ubuntu,现在开始菜单中有 2 个新项目:
重击 Bash 此终端在以下位置打开:
root@myName-PC:/mnt/c/Windows/System32#
Ubuntu Ubuntu 此终端在以下位置打开:
root@myname-PC:~#
两者有什么区别?
例如,我们想要安装 Git 和 Utils、RVM (Ruby),然后克隆一个 Git 项目并使用 Capistrano 命令通过 SSH 进行部署。应该像上面那样使用 Bash 或 Ubuntu 运行吗?
另外,在终端中,命令应该在 system32 或 C:/ 文件夹中运行吗?
谢谢
【问题讨论】:
【参考方案1】:Bash 终端是旧样式(在 Windows 10 v1790 又名 Fall Creator Update 之前)。它位于%LocalAppData%\Lxss
并使用lxrun.exe
进行管理。
Ubuntu 终端是新样式,从 Microsoft Store 下载。启动器部分是一个 Windows 应用程序 (%ProgramFiles%\WindowsApp
),其数据位于 %LocalAppData%\Packages
。
这是两个独立安装的 Windows 子系统 for Linux,互不干扰。实际上,您只需要其中一种,因此请根据自己的喜好选择一种。
我个人不喜欢 Windows 应用商店版本,因为它很容易被删除,这对于生产力环境来说不是一件好事。
【讨论】:
【参考方案2】:我试图删除 旧版“Windows 上的 Bash”,但未能成功,因为我的系统中没有 lxrun.exe
。但如果有人需要,here's how:
如果您愿意,您可以手动删除您的旧实例。如果您在使用 lxrun.exe 卸载旧版发行版时遇到问题,或者正在运行不附带 lxrun.exe 的 Windows 10 Spring 2018 更新(或更高版本),则可能需要这样做。
要强制删除旧版 WSL 发行版,请使用 Windows 的文件资源管理器或命令行删除
%localappdata%\lxss\
文件夹(及其所有子内容):(使用 PowerShell)
rm -Recurse $env:localappdata/lxss/
【讨论】:
【参考方案3】:git bash 与 Ubuntu bash。
除了 bash 的版本之外,基本上没有什么不同。因为 bash 就是 bash。很可能在不同的时间出于不同的目的在 PC 上安装了不同版本的 bash。它们也很可能在 PC 上的不同文件夹中找到。
从两个不同的 shell 运行以下代码。这将返回 bash 的版本:
echo "$BASH_VERSION"
在这台 PC 上,使用两个终端(MinGW 和 Ubuntu)返回以下版本的 bash:(见下面的图片链接)
5.0.17(1) - release
4.4.23(1) - release
大多数使用 PC 已有一段时间的人可能会发现他们的 PC 上安装了两个(或更多)不同版本的 bash。在这台 PC 上,旧版本的 bash 早在一段时间前就已安装。
在这台 PC 上安装 Cygwin 时,可能已经安装了旧版本的 bash。或者可能是很久以前安装 Git 时安装了旧版本的 bash。现在真的无所谓了。在这台 PC 上,至少可以在以下位置找到 bash:
C:\cygwin64\bin\bash.exe
C:\Program Files\Git\bin\bash.exe
C:\Program Files\Git\git-bash.exe
此 PC 上的 Windows 10 已更新。具体来说,WSL 内核已从 WSL 更新到 WSL2。此更新的一部分涉及开启一些 Windows 功能,包括:适用于 Linux 的 Windows 子系统。
有一个旧(虚拟)版本的 Ubuntu (18.04) 已安装在这台 PC 上一段时间。但是那个旧版本的 Ubuntu 在这次更新中消失了。此 WSL2 更新改变了 Linux (Ubuntu) 在此 PC 上的运行方式。在 WSL2 更新之后,Ubuntu 是从 Microsoft Store 安装的。这是 Ubuntu 20.04。
此 WSL2 更新和新安装的 Ubuntu 版本还在这台 PC 上安装了更新版本的 bash。而这个较新版本的 bash 就是上面显示的较新版本的 bash。
了解这两个 bash 版本之间差异的另一个好方法是在每个 shell 中输入以下内容:
type ping
结果应该清楚地表明一个版本的 bash 提供了来自 Windows 的源代码,而另一个版本的 bash 提供了来自 Ubuntu 的源代码。
ping is /c/windows/system32/ping
ping is /usr/bin/ping
有时一张图片胜过一千字。下面附上两个并排的新 Windows 终端。
这些终端显示两个不同版本的 bash。 Echo 返回在 MinGW shell 中使用的旧版本的 bash,而 Echo 返回在 Ubuntu shell 中使用的新版本的 bash。
【讨论】:
以上是关于c shell 和bash有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
处理命名管道时,fish shell 和 bash 有啥区别?
Bash shell 中的 $var、"$var" 和 "$var" 有啥区别?