标签 Shell 下的文章

Bash 并不是唯一可供选择的 Shell。还存在数量众多的 Shell,它们都有一些独特的特性,例如 Zsh、Fish、Ksh 和 Xonsh

在你的系统中,你可以同时安装多个 Shell。

要想将另一个 Shell 设为默认值,你可以按照以下方式使用 chsh 命令:

chsh -s path_to_binary_of_shell

如需找到 Shell 的二进制路径,你可以查看 /etc/shells 文件的内容。另外,你也可使用以下自动获取所需 Shell 二进制路径的命令:

chsh -s $(which new_shell)

接下来,让我们详细了解一下如何确定并更改 Shell。

我现在用的是哪个 Shell?

有很多方法可以帮你找出当前使用的是哪个 Shell,虽然专家可能会辩论这些方法的准确度。

最常用的,也是最简单的方式是:

echo $0

$0 是一个特别的 Shell 变量,这可以获取你正在使用的 Shell 或 Shell 脚本的名称(如果你在脚本中使用了它)。

你还可以使用下面的命令检查进程:

ps -p $

其中,$ 代表的是当前进程 / Shell 的进程 ID。

如何安装另一个 Shell?

和其他软件包一样,大部分知名 Shell,例如 Fish 和 Zsh,都可以直接从你的发行版软件仓库中下载安装。新的,相对小众的 Shell,例如 Xonsh,可能就需要不同的安装步骤了。你可以在它们的项目网页上找到具体的安装指南。

比如,你想 在 Ubuntu 上安装 Zsh,那么可以使用以下命令:

sudo apt install zsh

如何更改当前的 Shell?

假设你已经安装了另一个 Shell,那么我们来看一看如何切换过去。

实际上,你只需要输入新 Shell 的名称即可。比方说,你想切换到 Zsh,那就输入:

zsh

若要退出当前的 Shell,只需输入 exit 即可,你会回到你的默认 Shell。

如何查看默认的 Shell 是哪个?

有一个 SHELL 的环境变量,它可以告诉你当前账户的默认 Shell 是哪个:

echo $SHELL

举个例子,我切换到了 Zsh。此时,当前 Shell 显示的信息是 zsh,而默认 Shell 依然显示为 bash

这说明更改 Shell 并不会改变默认的 Shell。也就是说,下次你再次登录到该终端或系统,你还会返回到旧的默认 Shell,而不是新的 Shell。

如何知道系统中可用的 Shell 有哪些?

你可以通过查看 /etc/shells 文件,来了解系统中具有哪些可用的 Shell:

cat /etc/shells

下面就是我当前系统中所有可用的 Shell:

如何更改默认的 Shell?

/etc/shells 文件的内容显示了所有可用 Shell 的二进制文件位置。你需要将它与 chsh 命令一起使用。

假设我想让 Zsh 成为默认的 Shell,我可以输入:

chsh -s /usr/bin/zsh

更改后,你需要重新登入才能看到变化。

请注意,以上操作只会更改当前用户的默认 Shell。如果你是管理员,并且想更改其他用户的默认 Shell,那么你可以使用以下命令:

sudo chsh -s /usr/bin/zsh other_username

结论

Linux 的一大特色就是,用户可以自主选择。你完全可以根据自己的需要进行更改。这就是另一个例子,你不必局限于发行版提供的默认 Shell 的选择。你很欢迎自选一款 Shell,让你的工作变得更顺手。最后,祝你使用愉快 ?

(题图:DA/cf9b865d-2b98-4ada-88df-de1d1839aba1)


via: https://itsfoss.com/linux-change-default-shell/

作者:Abhishek Prakash 选题:lujun9972 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

本文章向你介绍了 Shell 脚本的基础知识以及其在日常生活中的重要性。

当我们登录到一个 UNIX/Linux 系统时,我们首先注意到的是闪烁的光标和 $ 符号之间的空格。这就是 Shell(交互界面)。多年来,它一直是一种无处不在(有时甚至是唯一的)与计算机交互的界面。在图形用户界面(GUI)出现和流行之前,终端和 Shell 是唯一的机制,可以让计算机按照我们的意图进行操作。乍一看,我们可能会想知道 Shell 的作用,除了将命令传递给底层操作系统以进行执行之外。我们中的大多数人熟悉像 ls(用于列出目录内容),cd(用于更改当前目录)等命令。通过 Shell,我们可以执行这些命令。Shell 理解我们输入的文本 - 将其转换为标记 - 然后在操作系统上执行这些标记。

不同的 Shell 变种

最初,终端使用了朴素的 Bourne Shell(即 Sh)。多年来,许多不同的 Shell 变种被开发出来和使用。其中一些流行的包括 C Shell(Csh) 和 Korn Shell(Ksh)。Sh 在一段时间内不再受欢迎,但通过其最新的化身 —— Bourne Again Shell(Bash),它再次流行起来。

Shell 实际上是做什么的?

Shell 是操作系统(OS)和用户之间的直接接口。通过使用命令和应用程序来使用计算机上安装的工具,我们可以使计算机按照我们的意愿工作。一些命令是安装在操作系统上的应用程序,而某些命令则是直接内置在 Shell 中的。在 Bash 中内置的一些命令包括 clearcdevalexec,还有 lsmkdir 这样的应用程序。内置在 Shell 中的命令因 Shell 而异。

在本文中,我们将涵盖与 Bash 相关的几个方面。

更多关于 Shell 的内容

我们中的大多数人都用过像 lscdmkdir 这样的命令。当我们在一个目录上运行 ls -l 命令时,该目录中的所有子目录和文件都会在屏幕上列出。如果数量很大,屏幕会滚动。如果终端不支持滚动条(在很多年里都是如此),则无法查看已滚动过的条目。为了克服这个问题,我们使用像 moreless 这样的命令。它们允许我们逐页查看输出。通常使用的命令是:

ls -l | less

在这里 Shell 是在做什么?看起来像是单个命令,实际上是 lsless 两个命令依次执行。管道符(|)将这两个程序连接起来,但连接由 Shell 管理。由于有了管道符,Shell 连接了这两个程序——它将 ls 命令的标准输出连接到 less 的标准输入(stdin)。管道功能使我们能够将任何程序的输出作为另一个程序的输入提供,而无需对程序进行任何更改。这是许多 UNIX/Linux 应用程序的理念——保持应用程序简单,然后将许多应用程序组合在一起以实现最终结果,而不是让一个程序做很多事情。

如果需要,我们可以将 ls 的输出重定向到文件中,然后使用 vi 查看它。为此,我们使用以下命令:

ls -l > /tmp/my_file.txt
vi /tmp/my_file.txt

在这种情况下,ls 的输出被重定向到一个文件中。这由 Shell 进行管理,它理解 > 符号表示重定向。它将其后面的标记视为文件。

使用 Shell 自动化

结合命令的能力是使用 Shell 命令创建自动化脚本的关键要素之一。在我最近的项目中,我们使用集群模式执行 Python/Spark(PySpark)应用程序。每个应用程序执行了许多结构化查询语言(SQL)语句 - SparkSQL。为了跟踪应用程序的进展,我们会打印有关正在执行的 SQL 的详细信息。这样可以让我们保留应用程序中正在发生的情况的日志。由于应用程序在集群模式下执行,要查看日志,我们必须使用以下 yarn 命令:

yarn log –applicationId [application_id]

在大多数情况下,应用程序生成的日志非常大。因此,我们通常将日志导入到 less 中,或将其重定向到一个文件中。我们使用的命令是:

yarn log –aplicationId [application_id] | less

我们的开发团队有 40 人。每个人都必须记住这个命令。为了简化操作,我将这个命令转换成了一个 Bash 脚本。为此,我创建了一个以 .sh 为扩展名的文件。在 UNIX 和 Linux 系统上,文件扩展名并不重要。只要文件是可执行的,它就能工作。扩展名在 MS Windows 上有意义。

需要记住的重要事项

Shell 是一个解释器。这意味着它会逐行读取程序并执行它。这种方法的限制在于错误(如果有)在事先无法被识别。直到解释器读取和执行它们时,错误才会被识别出来。简而言之,假如我们有一个在前 20 行完美执行,但在第 21 行由于语法错误而失败的 Shell 程序。当脚本在第 21 行失败时,Shell 不会回滚/撤销之前的步骤。当发生这样的情况时,我们必须纠正脚本并从第一行开始执行。因此,例如,如果在遇到错误之前删除了几个文件,脚本的执行将停止,而文件将永远消失。

我创建的脚本是:

#!/bin/bash
yarn log –applicationId 123 | less

…其中 123 是应用程序的 ID。

第一行的前两个字符是特殊字符(“释伴”)。它们告诉脚本这是一个可执行文件,并且该行包含要用于执行的程序的名称。脚本的其余行传递给所提到的程序。在这个例子中,我们将执行 Bash。即使包含了第一行,我们仍然必须使用以下命令对文件应用执行权限:

chmod +x my_file.sh

在给文件设置了执行权限之后,我们可以如下执行它:

./my_file.sh

如果我们没有给文件设置执行权限,我们可以使用以下命令执行该脚本:

sh ./my_file.sh

传递参数

你很快就会意识到,这样的脚本很方便,但立即变得无用。每次执行 Python/Spark 应用程序时,都会生成一个新的 ID。因此,对于每次运行,我们都必须编辑文件并添加新的应用程序 ID。这无疑降低了脚本的可用性。为了提高其可用性,我们应该将应用程序 ID 作为参数传递:

#!/bin/bash
yarn –log -applicationId ${1} | less

我们需要这样执行脚本:

./show_log.sh 123

脚本将执行 yarn 命令,获取应用程序的日志并允许我们查看它。

如果我们想将输出重定向到一个文件中怎么办?没问题。我们可以将输出重定向到一个文件而不是发送给 less

#!/bin/bash
ls –l ${1} > ${2}
view ${2}

要运行脚本,我们需要提供两个参数,命令变为:

./my_file.sh /tmp /tmp/listing.txt

当执行时,$1 将绑定到 /tmp$2 将绑定到 /tmp/listing.txt。对于 Shell,参数从一到九命名。这并不意味着我们不能将超过九个参数传递给脚本。我们可以,但这是另一篇文章的主题。你会注意到,我将参数命名为 ${1}${2},而不是 $1$2。将参数名称封闭在花括号中是一个好习惯,因为它使我们能够无歧义地将参数作为较长变量的一部分组合起来。例如,我们可以要求用户将文件名作为参数,并使用它来形成一个更大的文件名。例如,我们可以将 $1 作为参数,创建一个新的文件名为 ${1}_student_names.txt

使脚本更健壮

如果用户忘记提供参数怎么办?Shell 允许我们检查这种情况。我们将脚本修改如下:

#!/bin/bash
if [ -z "${2}" ]; then
  echo "file name not provided"
  exit 1
fi
if [ -z "${1}" ]; then
  echo "directory name not provided"
  exit 1
fi
DIR_NAME=${1}
FILE_NAME=${2}
ls -l ${DIR_NAME} > /tmp/${FILE_NAME}
view /tmp/${FILE_NAME}

在这个程序中,我们检查是否传递了正确的参数。如果未传递参数,我们将退出脚本。你会注意到,我以相反的顺序检查参数。如果我们在检查第一个参数存在之前检查第二个参数的存在,如果只传递了一个参数,脚本将进行到下一步。虽然可以按递增顺序检查参数的存在,但我最近意识到,从九到一检查会更好,因为我们可以提供适当的错误消息。你还会注意到,参数已分配给变量。参数一到九是位置参数。将位置参数分配给具名参数可以在出现问题时更容易调试脚本。

自动化备份

我自动化的另一个任务是备份。在开发的初期阶段,我们没有使用版本控制系统。但我们需要有一个机制来定期备份。因此,最好的方法是编写一个 Shell 脚本,在执行时将所有代码文件复制到一个单独的目录中,将它们压缩,并使用日期和时间作为后缀来上传到 HDFS。我知道,这种方法不如使用版本控制系统那样清晰,因为我们存储了完整的文件,查找差异仍然需要使用像 diff 这样的程序;但它总比没有好。尽管我们最终没有删除代码文件,但团队确实删除了存储助手脚本的 bin 目录!!!而且对于这个目录,我没有备份。我别无选择,只能重新创建所有的脚本。

一旦建立了源代码控制系统,我很容易将备份脚本扩展到除了之前上传到 HDFS 的方法之外,还可以将文件上传到版本控制系统。

总结

如今,像 Python、Spark、Scala 和 Java 这样的编程语言很受欢迎,因为它们用于开发与人工智能和机器学习相关的应用程序。尽管与 Shell 相比,这些语言更强大,但“不起眼”的 Shell 提供了一个即用即得的平台,让我们能够创建辅助脚本来简化我们的日常任务。Shell 是相当强大的,尤其是因为我们可以结合操作系统上安装的所有应用程序的功能。正如我在我的项目中发现的那样,即使经过了几十年,Shell 脚本仍然非常强大。我希望我已经说服你尝试一下了。

最后一个例子

Shell 脚本确实非常方便。考虑以下命令:

spark3-submit --queue pyspark --conf "[email protected]" --conf "spark.yarn.keytab=/keytabs/abcd.keytab" --jars /opt/custom_jars/abcd_1.jar --deploy-mode cluster --master yarn $*

我们要求在执行 Python/Spark 应用程序时使用此命令。现在想象一下,这个命令必须每天被一个由 40 个人组成的团队多次使用。大多数人会在记事本中复制这个命令,每次需要使用时,会将其从记事本中复制并粘贴到终端中。如果复制粘贴过程中出现错误怎么办?如果有人错误使用了参数怎么办?我们如何调试使用的是哪个命令?查看历史记录并没有太多帮助。

为了让团队能够简单地执行 Python/Spark 应用程序,我们可以创建一个 Bash Shell 脚本,如下所示:

#!/bin/bash
[email protected]
KEYTAB_PATH=/keytabs/abcd.keytab
MY_JARS=/opt/custom_jars/abcd_1.jar
MAX_RETRIES=128
QUEUE=pyspark
MASTER=yarn
MODE=cluster

spark3-submit --queue ${QUEUE} --conf "spark.yarn.principal=${SERVICE_PRINCIPAL}" --conf "spark.yarn.keytab=${KEYTAB_PATH}" --jars ${MY_JARS} --deploy-mode ${MODE} --master ${MASTER} $*

这展示了一个 Shell 脚本的强大之处,让我们的生活变得简单。根据你的需求,你可以尝试更多的命令和脚本,并进一步探索。

(题图:MJ/f32880e8-0cdc-4897-8a1c-242c131111bf)


via: https://www.opensourceforu.com/2022/05/shell-scripting-is-still-going-strong/

作者:Bipin Patwardhan 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

关于著名的 Linux Shell - Bash、Zsh 和 Fish 的一些注释和特性。

Linux 之所以强大,是因为它提供了用于与系统进行交互的多功能的命令行界面。在这中情况下,Shell 扮演了用户和 Linux 内核之间的桥梁。本文将探讨三种流行的 Linux Shell - Bash、Zsh 和 Fish,并深入了解它们的独特特性和功能。

理解 Linux Shell

什么是 Shell?

Shell 是一个命令行解释器,允许你通过文本命令与操作系统进行交互。它接收你的输入,处理它,并与 Linux 内核通信以执行所请求的操作。最后,它会给你一个输出。

(LCTT 译注:“Shell” 一词大约取自其“界面”、“外壳”的含义。)

Shell 在 Linux 中起着至关重要的作用,因为它们使用户能够执行各种任务,从简单的文件导航到复杂的系统管理任务。不同的 Shell 提供各种功能,因此选择适合你工作流程的 Shell 至关重要。

Bash

Bash,全称 “Bourne Again SHell”,是 Linux 发行版中最广泛使用的默认 Shell 之一。它以其简洁和兼容性而闻名,是初学者的优秀选择。

Bash 的特点

Bash 具有众多特性,包括:

  • 命令历史:使用箭头键轻松访问先前执行的命令。
  • Tab 键补全:节省时间,让 Bash 为你自动完成文件名和命令。
  • 脚本编写:编写和运行 Shell 脚本以自动化重复任务。从这个角度来看,它也是一个程序。
  • Bash 在大多数 GNU/Linux 系统中默认安装。
  • 配置设置存储在家目录下的 .bashrc 文件中。

和其他 Shell 一样,Bash 有其优点和缺点。使用 Bash 的一些优势包括广泛的使用性、详尽的文档以及庞大的社区支持。然而,Bash 可能缺乏其他 Shell 中存在的一些现代化特性。

Linux 中的 Bash shell

安装

  • 在 Linux 发行版中打开终端。
  • 输入 bash --version 检查是否已安装 Bash。
  • 若尚未安装,使用软件包管理器安装 Bash。例如,在 Ubuntu 上,输入 sudo apt-get install bash
  • 对于 Fedora 和基于 RPM 的 Linux,请使用 sudo dnf install bash

Zsh

Zsh,全称 “Z Shell”,是一种强大且功能丰富的 Shell,深受经验丰富的用户欢迎。它吸取了 Bash 和其他 Shell 的优点,提升了用户体验。

Zsh 的优势

Zsh 提供了几个优势,包括:

  • 高级自动补全:Zsh 在 Bash 的基础上提供了更多上下文感知的建议,超越了简单的 Tab 键补全。
  • 当你按下 Tab 键时,Zsh 会显示可能的值以供选择,同时进行自动补全。
  • 插件支持:通过社区中提供的各种插件,扩展 Zsh 的功能。
  • 这里有一个 庞大的 Zsh 主题集合
  • 你还可以使用 Oh My Zsh 脚本 进行广泛的自定义。

应用 powerlevel10k zsh 主题后的效果

Zsh 的复杂性可能使新手感到不知所措,其丰富的配置选项可能会使初学者感到困惑。

以下是安装 Zsh 的方法:

  • 在 Linux 发行版中打开终端。
  • 输入 zsh --version 检查是否已安装 Zsh。
  • 如果尚未安装,请使用软件包管理器安装 Zsh。
  • 例如,在 Ubuntu 上,输入 sudo apt-get install zsh
  • 对于 Fedora 和基于 RPM 的发行版,输入 sudo dnf install zsh

Fish Shell

Fish,全称 “Friendly Interactive SHell”,着重于用户友好性和易用性。它拥有现代、直观的界面,特别适合新的 Linux 用户。

Fish 的独特特性

Fish 的独特之处在于:

  • 语法高亮:使用彩色标记文本来区分命令、选项和参数。
  • 自动建议:Fish 根据你的历史记录和当前输入智能地建议命令。
  • Fish 被设计为开箱即用的高效工具。但是,你可以通过创建 ~/.config/fish/config.fish 文件并添加自定义配置来进一步个性化它。

虽然 Fish 在用户友好性方面表现出色,但其独特的设计可能并不适合所有人。一些高级用户可能会发现某些功能在高级使用方面有所限制。

Fish Shell

Fish Shell 的安装

  • 在 Linux 发行版中打开终端。
  • 输入 fish --version 检查是否已安装 Fish。
  • 如果尚未安装,请使用软件包管理器安装 Fish。例如,在 Ubuntu 上,输入 sudo apt-get install fish
  • 对于 Fedora 和其他基于 RPM 的发行版,输入 sudo dnf install fish

Bash、Zsh 和 Fish 的比较

为了帮助你决定哪种 Shell 适合你的需求,让我们从各个方面比较这三个流行选择:

性能与速度

Bash 以其速度和高效性而闻名,适用于资源受限的系统。Zsh 虽然稍慢一些,但其广泛的功能和能力弥补了这一点。作为更具交互性的 Shell,Fish Shell 可能会略微降低性能,但提供了愉快的用户体验。

用户界面和体验

Bash 的界面简单明了,非常适合初学者,而 Zsh 和 Fish 提供了更引人注目和交互式的界面。Zsh 的高级自动补全和 Fish 的语法高亮为用户创造了视觉上的吸引力。

可定制性和插件

Zsh 在可定制性方面表现出色,允许用户对其 Shell 环境进行微调。通过庞大的插件集合,Zsh 提供了无与伦比的可扩展性。Fish 则采取了更有主见的方式,专注于开箱即用的可用性,这可能对某些用户有所限制。

选择合适的 Shell

选择合适的 Shell 与你的具体需求和经验水平密切相关。

如果你是 Linux 的新手并且更喜欢简单、无花俏的体验,Bash 是一个极好的起点。它的易用性和详尽的文档使其非常适合初学者。

对于希望更多掌握控制权并愿意花时间进行定制的经验丰富的用户来说,Zsh 强大的功能和插件提供了一个令人兴奋和动态的环境。

如果你对自动化任务和编写复杂的 Shell 脚本感兴趣,Bash 在 Linux 生态系统中的广泛应用和全面支持使其成为一个可靠的选择。

结论

Bash、Zsh 和 Fish 各有其优势,满足不同用户偏好。如果你刚接触 Linux,Bash 的简单性使其成为一个极好的起点。精通用户和那些寻求定制化的用户可能会觉得 Zsh 更吸引人,而 Fish 的用户友好设计则适合寻求直观界面的初学者。最终,选择权在你手中,探索这些 Shell 将带来更高效和愉悦的 Linux 使用体验。

你最喜欢的 Shell 是什么?在下方的评论框中告诉我。

(题图:MJ/b6490b57-63bd-4fdd-bd3f-bf6d4aef1c4a)


via: https://www.debugpoint.com/linux-shells/

作者:Arindam 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

你可能已经知道像 Bash 和 Zsh 这样的流行 Shell。让我们来探索一些有趣和独特的 Shell。

Shell 通过解释命令为 Linux 和类 Unix 系统提供了一个接口,充当用户与操作系统的核心工作之间的中介。

毫无疑问,Bash Shell 是最受欢迎的 Shell 之一,但有些用户喜欢其他 Shell,比如在 macOS 上的默认 Shell——ZSH。但是除了这些流行的 Shell 之外,还存在许多 Shell,具有不同的功能和用途。

在本文中,我们将介绍一些被积极维护并提供不同用户体验的不太常见的 Shell。

1、Fish Shell

谈到除了 Bash、Zsh 之外的 Shell,第一个想到的就是 Fish Shell。

Fish 是一个智能的、用户友好的命令行 Shell,主要适用于类 Unix 操作系统。

Fish Shell

Fish Shell 的特点:

  • 根据历史记录提供命令自动建议和补全。
  • 支持 24 位真彩。
  • 支持语法高亮,所有特性都可以开箱即用。

安装 Fish:

Fish 可在几乎所有 Linux 发行版的官方仓库中获得。在 Ubuntu 中,你可以通过以下命令来安装:

sudo apt install fish

Ubuntu 仓库中的版本有点旧。如果你想安装最新版本,可以使用该团队提供的官方 PPA。

sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update
sudo apt install fish
Fish Shell

2、Nushell

Nushell(Nu)是一种新型的 Shell,可以在 Linux、macOS、Windows、BSD 等系统上使用。它的哲学和灵感来自于类似于 PowerShell、函数式编程语言和现代 CLI 工具等项目。

Nushell

Nushell 的特点:

  • 一切皆数据:Nu 管道使用结构化数据,因此你每次都可以使用同样的方式安全地选择、过滤和排序。
  • 强大的插件:可以使用强大的插件系统轻松扩展 Nu。
  • 易读的错误消息:Nu 操作的是类型化的数据,因此它能够检测其他 Shell 无法检测到的错误。当出现问题时,Nu 会准确指出问题所在和原因。
  • 干净的 IDE 支持。

安装 Nushell:

如果你使用的是 Ubuntu,是无法找到一个 Apt 存储库来安装 Nushell 的。但是,根据其在 GitHub 上的说明,你可以通过安装所需的依赖项来构建它。

幸运的是,还有一种方法可以使用 Homebrew 在任何发行版上安装它。你可以参考我们的教程 在 Linux 上安装并使用 Homebrew 软件包管理器,成功在 Linux 上安装后,你需要输入以下命令来安装 Nushell:

brew install nushell

请访问其官方网站以查看更多安装方式。

Nushell

3、Dune

该项目的创建者将 Dune 描述为海滩上的一个 “贝壳”。Dune 是一个快速、实用且美观的 Shell,提供了一些特殊的元编程功能,比如引用。

Dune Shell

Dune Shell 的特点:

  • 在进入交互模式之前,Dune 执行存储在主目录中的“预载”启动文件。
  • Dune 的 REPL 是完全可定制的。
  • 可以通过将变量分配给程序名称来定义别名。
  • 使用宏来编写修改 Shell 环境的函数,就像命令或程序一样。
  • Dune 提供了丰富的标准库,并提供漂亮的界面来查看每个模块中可用的所有函数。

安装 Dune Shell:

Dune shell 可在 Arch Linux 存储库中以 dunesh 的名字获得。

对于其他用户,Dune shell 可以通过 cargo 安装。所以,首先需要 安装最新版本的 Rust。如果已经安装了 Rust,请确保你有最新的版本,然后继续安装 Dune。

cargo install -f dune

安装完成后,可以通过输入以下命令访问 Shell:

dunesh
Dune Shell

4、Xonsh

Xonsh 是一个用 Python 编写的,跨平台 Shell 和命令提示符。它结合了 Python 和 Bash Shell,用户可以直接在 Shell 中运行 Python 命令。甚至可以结合使用 Python 和 Shell 命令。

Xonsh shell

如果你想了解更多,请阅读我们的 Xonsh 文章:

Xonsh Shell:结合 Bash Shell 和 Python 最佳特点的 Shell

Xonsh Shell 的特点:

  • Xonsh 语言具有 Bash 中常用的 Shell 原语。
  • 在 Python 中准备环境变量和参数,然后在 Shell 命令中使用它们。
  • 第三方扩展系统 Xontribs。
  • 可自定义的标签补全、键绑定、颜色样式。
  • 丰富的界面,方便查看历史记录。

安装 Xonsh Shell:

Xonsh 可在许多 Linux 发行版的仓库中获得,如 Ubuntu、Fedora 等。因此,要在 Ubuntu 上安装它,请运行:

sudo apt install xonsh

Xonsh 还提供了一个 AppImage 包,可以从它们的下载页面下载。如果你不熟悉这种文件格式,请参考我们的 AppImage 指南

Xonsh

5、Hilbish

Hilbish 是一个可扩展 Shell,可通过 Lua 编程语言进行定制。该 Shell 面向普通用户和高级用户。

Hilbish shell

Hilbish 的特点:

  • 简单易用的脚本编写。
  • 历史和补全菜单:为用户提供正确的补全和历史搜索菜单。
  • 通过 Lua API 可以进行语法高亮和提示。
  • 它可以在 Unix 系统和 Windows 上运行,但在 Windows 上可能会遇到问题。

安装 Hilbish:

Hilbish 在 Ubuntu 的包仓库中不可用。因此,需要从源代码构建安装。

要安装它,需要安装 Gotask

sudo apt install golang-go
sudo snap install task --classic

安装完依赖项后,运行以下命令来安装 Hilbish shell:

git clone --recursive https://github.com/Rosettea/Hilbish
cd Hilbish
go get -d ./...

如果要使用稳定版,请运行以下命令:

git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
task build
sudo task install
Hilbish

6、Elvish

Elvish 是一种丰富的编程语言和多功能交互式 Shell。它可以在 Linux、Mac 和 Windows 上运行。即使版本 v1.0 尚未发布,它已经适合大多数日常交互使用。

Elvish shell

Elvish 的特点:

  • 强大的管道:Elvish 中的管道可以携带结构化数据,而不仅仅是文本。你可以通过管道传输列表、映射甚至函数。
  • 直观的控制结构。
  • 目录历史:Elvish 记住了你访问过的所有目录。你可以通过按 CTRL+L 访问它。
  • 命令历史。
  • 内置文件管理器:通过按 CTRL + N 访问。

安装 Elvish:

Elvish Shell 可在 Ubuntu 和 Arch Linux 的包管理器中获得。因此,要安装它,请打开终端并键入:

sudo apt install elvish

或者

sudo pacman -S elvish

要了解有关 Elvish 的更多信息,请访问 Elvish 的官方网站。

Elvish

7、Oh

据其开发者称,Oh 是 Unix shell 的重新设计。

它旨在成为现代 Shell 的更强大、更稳健的替代品,同时尊重 Unix shell 在过去半个世纪中建立的惯例。

Oh Shell 的特点:

  • 一流的频道、管道、环境和函数。
  • 适用于标准 Shell 构造的丰富返回值。
  • 支持模块化。
  • 简化的评估和引用规则。
  • 语法尽可能少地偏离已有的惯例。

安装 Oh:

Oh 提供了一个预编译的二进制文件。你需要从它们的 官方 GitHub 页面 下载它。

你需要使用以下命令为文件授予执行权限:

chmod +x oh

运行以下命令以在你的系统上安装它:

sudo mv oh /usr/local/bin/

现在,你可以通过以下命令启动 Oh:

oh

要了解有关 Oh 的详细信息,请查阅其文档。

Oh

8、Solidity

Solidity 是一个带有轻量级会话记录和远程编译器支持的交互式 Shell。当你更改指示/语言时,它会自动获取匹配的远程编译器。

Solidity 的特点:

  • pragma solidity <version> 会尝试动态加载所选的编译器版本。
  • 可以使用 .session 命令保存和恢复会话。
  • 设置在退出时保存(在运行并发 shell 时不安全)。
  • $_ 是上一个已知结果的占位符。
  • 特殊命令是具有点前缀。其他所有都将被视为 Solidity 代码进行评估。

安装 Solidity:

你可以通过 npm 安装 Solidity shell。

确保你安装了最新版本的 nodejsnpm,然后输入以下命令:

npm install -g solidity-shell

安装完成后,运行 solidity-shell 来开始会话。

Solidity Shell

9、Yash

Yash(Yet another shell)是一个遵循 POSIX 标准的命令行 Shell,使用 C99(ISO/IEC 9899:1999)编写。它具有适用于日常交互和脚本使用的功能。

Yash Shell 的特点:

  • 全局别名。
  • 套接字重定向、管道重定向和进程重定向。
  • 提示符命令和未找到命令的处理程序。
  • 带有预定义补全脚本的命令行补全,覆盖了 100 多个命令。
  • 基于命令历史记录的命令行预测。

安装 Yash Shell:

要安装该 Shell,你需要转到它们的 GitHub 发布 页面下载 tar 文件。解压 tar 文件;在其中,你将找到一个包含安装说明的 INSTALL 文件。

通常,你应该在提取的文件夹中执行以下命令:

./configure
make
sudo make install

要了解有关 Yash Shell 的详细信息,请查看其手册页面。

Yash

顺便提及

  • Ion:Ion Shell 是用 Rust 编写的一种现代系统 Shell,主要用于 RedoxOS。它仍然是一个正在开发中的工作,用户应该对语法会变化有所预料。
  • Closh:Closh 是一种类似 Bash 的 Shell,将传统的 UNIX Shell 与 Clojure 的强大功能相结合。它旨在成为 Bash 的现代替代品。它也是在开发的早期阶段。
  • Dash:Dash 是来自 Debian 的符合 POSIX 标准、快速轻量级的 Shell。

? 你对这些列出的 Shell 有何看法?你是否会尝试将默认 Shell 更改为这里的某些选项?你最喜欢的是哪一个?在下面的评论框中分享你的想法。

(题图:MJ/a84a1625-4dd1-4589-aabb-ce3f37090f32)


via: https://itsfoss.com/shells-linux/

作者:Sreenath 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Nushell 是一个独特的 Shell,它提供易于阅读的错误信息,以及跨平台支持。在这里可以了解到更多关于它的信息。

即使你对使用终端不感兴趣,Linux 终端也常常使一些繁重的工作变得更加轻松,以及可以让你修复一些东西。因此,可以说,如果你知道自己在做什么,Linux 终端是相当强大的。

这也是事实!但是当你看到一些错误消息就表明出现问题了。如果你没有足够的使用经验,可能不知道如何解决它。

虽然这些错误信息试图向你传达该问题的最佳含义,但不是每个用户都能轻易理解该如何修复。对于初学者来说,这通常需要进行一些研究。但是,如果错误能更清晰一些,用户就能更快地解决它。

不仅仅限于错误信息,例如,你在终端浏览文件时看到的输出结构,也不是最漂亮的。

Terminal listing several files

你明白我的意思吗? 当然,当你有更多不同类型的文件时,这可能变得更加复杂。而且,你无法从基本的 ls 命令的输出中了解到文件的权限、组等。

这就是 Nushell 试图解决的问题。

Nushell:一个默认提供用户友好输出的 Shell

Nushell example screenshot

Nushell 也被称为 Nu,它的理念和灵感来自于 PowerShell、函数式编程语言和现代 CLI 工具等项目。

让我给你举个例子,想象一下你只想让你的输出列出你的主目录内类型为文件的项目,包括隐藏文件。那么,要实现这一点,只要输入下面的命令就可以了:

ls -a | where type == 'file'

Listing only files with Nushell

观察一下,它的语法是多么清晰和简单。现在想象一下,用 Nushell 查找进程和名称 ID、它的状态,以及 CPU 或内存消耗是多么容易。这是它魔法的一部分!

它会尽力以专门组织的方式为你输入的命令提供适合用户的输出。

Nushell 的特点

Error messages in Nu, one of its primary highlights

根据现有的官方信息,它的一些最受欢迎的功能包括:

  • 任何操作系统都通过管道进行控制。 Nu 可以在 Linux、macOS 和 Windows 上工作。换句话说,作为一个灵活的跨平台 shell,具有现代感。
  • 一切都是数据。 Nu 管道使用结构化数据,所以你可以安全地选择、过滤和排序,每次都是同样的方式。
  • 强大的插件。 使用强大的插件系统,很容易扩展 Nu 的功能。
  • 易于阅读的错误信息。 Nu 操作的是类型化的数据,所以它可以捕捉到其他 shell 所没有的错误。当错误发生时,Nu 会告诉你确切的位置和原因。
  • 清晰的 IDE 支持。

你可以看看它的 官方文档,以全面了解它的功能和用法。

在你的系统中安装 Nushell

不幸的是,如果你是一个像我一样的 Ubuntu 用户,你将找不到安装 Nushell 的 APT 仓库。但是,你可以按照它在 GitHub 上的说明,通过安装所需的依赖项来构建它。

幸运的是,有一种方法可以在任何发行版上安装它,即使用 Homebrew。到它的官方网站去了解更多的安装选项。

Nushell

你可以参考我们关于 在 Linux 上安装和使用 Homebrew 包管理器 的教程。当你在 Linux 上成功设置了它,你需要输入以下命令来安装 Nushell:

brew install nushell

Installing nushell with Homebrew

当这个过程完成后,只要输入 nu 就可以启动 Nushell shell。这就完成了!

如果你想把 Nushell 设置为你的默认 shell,你可以用命令 chsh 来做,但是记住,它仍然在开发阶段,这就是为什么我们不推荐它用于日常使用。

然而,在你决定尝试之前,你可以在其网站或 GitHub 页面 上了解关于它的更多信息。

你对这个有趣的 shell 什么看法?请在下面的评论中告诉我你的想法。

题图由 donations welcomePixabay 上发布


via: https://itsfoss.com/nushell/

作者:Marco Carmona 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

最受欢迎的 shell 是什么?我猜你会回答 bash 或者 zsh,没错,的确如此。

UNIX 和 Linux 系统上有许多可用的 shell,包括 Bash、Ksh、Zsh、Fish 等等。

最近,我碰到了另外一个 shell,它结合了 Python 和 bash,还蛮特别的。

Xonsh shell,为喜爱 Python 的 Linux 用户而打造

Xonsh 是一个使用 Python 编写的跨平台 shell 语言和命令提示符。

它结合了 Python 和 Bash shell,因此你可以在这个 shell 中直接运行 Python 命令(语句)。你甚至可以把 Python 命令和 shell 命令混合起来使用。

听起来不错吧?如果你是一个 Python 程序员的话,你应该会更加兴奋。

在 Linux 上安装 Xonsh shell

有多种方式可以在 Linux 系统上安装 Xonsh shell。

你可以使用软件包管理器安装它(主要的 Linux 发行版的仓库中都有 Xonsh shell)。

在 Ubuntu 和 Debian 上,你可以尝试运行:

sudo apt install xonsh

因为它本质上是一个 Python 应用,所以你总是可以使用 Pip 来安装(如果你的系统已经安装了的话)。或者,你也可以使用 Conda 来安装 Xonsh。同时,它还提供了 AppImage 格式和 Docker 镜像。

你可以自由选择你喜欢的安装方式。

Xonsh shell 初体验

如果你不熟悉 Linux 的“多 shell”概念和终端的相关知识,我推荐你阅读 我写的一篇终端入门的文章。这篇文章会帮助 Linux 新手弄清楚很多东西。

我在这里简单介绍一下。你的终端运行着一个默认的 shell(通常是 bash shell)。如果你在系统上安装了其他的 shell,你可以 轻松地切换这些 shell

要进入 Xonsh shell,只需运行一条命令:

xonsh

它会建议你运行一个设置向导,然后创建一个 Xonsh shell 的自定义 rc 配置文件。这是可选的,你也可以晚些时候再做。

一旦你开始使用它,你就立刻会感觉到一些不同。

当你开始输入一条命令时,Xonsh 会自动建议历史记录中的最后一条匹配命令。你可以按下右箭头键确认使用这条自动建议的命令。你也可以按下上、下箭头键来选择历史记录中的其他匹配命令。

Xonsh shell automatically suggests last matching command from the history as you type

不仅如此,它还支持交互式的 Tab 补全。当你开始输入命令,并按下 tab 键,它会显示一个类似于下拉式的交互式菜单。你可以在这个菜单中选择可用的命令。

Tab completion in Xonsh shell

你可以混合使用 Python 和 bash 命令,并且直接在 shell 中运行它们。

如果你对 终端定制 感兴趣,你可以花点时间和精力,根据自己的喜好来定制 Tab 补全、按键绑定和颜色样式。

它同时拥有一个叫做 Xontrib 的用户自定义插件系统,你可以使用这些插件来扩展 Xonsh shell 的功能。

如果你是一个终端爱好者,并渴望学习更多终端知识,你可以浏览它的 丰富的文档系统

最后

大多数用户坚持使用默认的 Bash shell,这很正常。有一些开发者和系统管理员会选择使用 Zsh,因为它有很多附加特性。而 Xonsh 完全聚焦在 Python 上,对于 Python 使用者来说,它或许具有吸引力。对于其余的人来说,Bash 已经足够好了。

你使用过 Xonsh 或者其他的 shell 吗?你用它来代替 Bash 的原因是什么呢?欢迎在评论区留言。


via: https://itsfoss.com/xonsh-shell/

作者:Abhishek Prakash 选题:lujun9972 译者:lkxed 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出