一款很火的智能化 Shell 工具多色彩优化命令显示结果可以替换系统默认的 Shell 工具,支持多平台免费开源使用

news2024/10/5 19:13:03

一款很火的智能化 Shell 工具多色彩优化命令显示结果可以替换系统默认的 Shell 工具,支持多平台免费开源使用。

Nushell,它是用Rust写的,安全性提高的同时,Bug率也降低了,NuShell 专注于实现以下目标:

1、创建具有现代感的灵活的跨平台Shell

2、允许你将命令行应用程序与可理解数据结构的Shell进行混合和匹配

3、具有现代命令行应用程序提供的用户体验优化

在这里插入图片描述
简单的效果演示:
在这里插入图片描述
NuShell的目标是彰显 Shell 的 Unix 哲学,就是用管道将简单的命令连接在一起,并且带来现代的开发风格。Nu 从许多熟悉的领域中汲取了线索:bash 等传统 shell,PowerShell 等高级 shell,函数式编程,系统编程等。但是 Nu 并没有试图成为所有行业的杰作,而是将精力集中在做好一些事情上:

创建具有现代感的灵活的跨平台 Shell

允许你将命令行应用程序与可理解数据结构的 Shell 进行混合和匹配

具有现代命令行应用程序提供的用户体验优化

NuShell使用Rust编写,安全性提高的同时,Bug率也降低了


在 Linux / macOS 系统上运行 NuShell 的最简单快捷的方法是从crates.io安装 ,或从我们的Github 发布页面下载预构建的二进制文件。

对于任何 Linux 发行版来说,最理想的安装方法是二进制方法。我们将使用 curl 工具获取最新版本,下载然后解压缩文件以获得 Nushell 二进制文件。

安装开发人员工具

Ubuntu / Debian:

sudo apt update
sudo apt install pkg-config libssl-dev -y
sudo apt install libxcb-composite0-dev libx11-dev -y

基于 RHEL 的系统:

sudo yum install libxcb openssl-devel libX11-devel -y

苹果系统:

brew install openssl cmake

在 Linux 上安装 Nushell

下载最新的二进制归档文件:

cd /tmp

curl -s  https://api.github.com/repos/nushell/nushell/releases/latest | grep browser_download_url |  cut -d '"' -f 4 | grep '\linux.tar.gz' | wget -i -

解压下载的文件:

tar -xvf nu_*_linux.tar.gz

将二进制文件复制到您的 PATH:

sudo mv nu_*_linux/nushell-*/nu /usr/local/bin

Nushell将在启动时在您的 PATH中查找插件。虽然Nushell在没有它们的情况下会有一些功能,但要获得完整的功能,你需要将它们复制到您的路径中,以便加载它们。

sudo mv nu_*_linux/nushell-*/nu_plugin* /usr/local/bin

Fedora 用户可以使用COPR repo安装Nushell:

sudo dnf copr enable atim/nushell -y && sudo dnf install nushell -y

在 macOS 上安装 Nushell

对于二进制安装方法,请使用 brew:

$ brew install nushell

从二进制文件手动安装
在 macOS 系统上运行以下命令来下载 Nushell 的最新版本:

cd /tmp

curl -s  https://api.github.com/repos/nushell/nushell/releases/latest | grep browser_download_url |  cut -d '"' -f 4 | grep '\macOS.zip' | wget -i -

解压下载的文件:

unzip nu_*_macOS.zip

将nu二进制文件复制到你的PATH:

sudo mv nu_*_macOS/nushell-*/nu /usr/local/bin

复制Nu插件:

sudo mv nu_*_macOS/nushell-*/nu_plugin* /usr/local/bin
 在Docker运行Nushell 

如果你是windows用户,那么,建议你直接在Docker运行体验就好了,几句命令就搞定了,命令如下:

docker run -it quay.io/nushell/nu:latest

在这里插入图片描述
将用户 Shell 设置为 Nushell

创建一个名为techviewleo的新用户:

$ sudo adduser techviewleo
Adding user `techviewleo' ...
Adding new group `techviewleo' (1000) ...
Adding new user `techviewleo' (1000) with group `techviewleo' ...
Creating home directory `/home/techviewleo' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for techviewleo
Enter the new value, or press ENTER for the default
    Full Name []:
    Room Number []:
    Work Phone []:
    Home Phone []:
    Other []:
Is the information correct? [Y/n] y

将用户默认 shell 设置为 Nu:

sudo chsh -s /usr/local/bin/nu techviewleo

切换到创建的用户帐户:

$ su - techviewleo
Password:
Welcome to Nushell 0.28.0 (type 'help' for more info)
/home/techviewleo>

测试 ls 命令在 Nushell 中的工作方式:

ls

ls | where size > 10kb
sys

sys | get disks

运行效果展示:

在这里插入图片描述


Nushell 不是 Bash
Nushell 既是一种编程语言,也是一种 Shell,正因为如此,它有自己的方式来处理文件、目录、网站等等。我们对其进行了建模,以使其与你可能熟悉的其他 Shell 的工作方式接近。其中管道用于将两个命令连接在一起:

ls | length

Nushell 也支持其他常见的功能,例如从之前运行的命令中获取退出代码(Exit Code)。

虽然它确实有这些功能,但 Nushell 并不是 Bash。Bash 的工作方式以及一般的 POSIX 风格,并不是 Nushell 所支持的。例如,在 Bash 中你可以使用:

echo “hello” > output.txt

在 Nushell 中,我们使用>作为大于运算符,这与 Nushell 的语言特质比较吻合。取而代之的是,你需要用管道将其连接到一个可以保存内容的命令:

echo “hello” | save output.txt

以 Nushell 的方式思考: Nushell 看待数据的方式是,数据在管道中流动,直到它到达用户或由最后的命令处理。Nushell 使用命令来完成工作,学习这些命令以及何时使用它们有助于你组合使用多种管道。

把 Nushell 想象成一种编译型语言
Nushell 设计的一个重要部分,特别是它与许多动态语言不同的地方是,Nushell 将你提供给它的源代码转换成某种可执行产物,然后再去运行它。Nushell 没有 eval 功能,因此也不允许你在运行时继续拉入新的源代码。这意味着对于诸如引入文件使其成为你项目的一部分这样的任务,需要知道文件的具体路径,就如同 C++或 Rust 等编译语言中的文件引入一样。

例如,下面的代码在 Nushell 中是没有意义的,如果作为脚本将无法执行:

echo “def abc [] { 1 + 2 }” | save output.nu source “output.nu” abc

source 命令将引入被编译的源码,但前面那行 save 命令还没有机会运行。Nushell 运行整个程序块就像运行一个文件一样,而不是一次运行一行。在这个例子中,由于output.nu文件是在 “编译” 步骤之后才创建的,因此 source 命令在解析时无法从其中读取定义。

另一个常见的问题是试图动态地创建文件名并source,如下:

source " ( "( "(my_path)/common.nu"

这就需要求值器(Evaluator)运行并对字符串进行求值(Evaluate),但不幸的是,Nushell 在编译时就需要这些信息。

以 Nushell 的方式思考: Nushell 被设计为对你输入的所有源代码使用一个单一的“编译”步骤,这与求值是分开的。这将允许强大的 IDE 支持,准确的错误提示,并成为第三方工具更容易使用的语言,以及在未来甚至可以有更高级的输出,比如能够直接将 Nushell 编译为二进制文件等。

变量是不可变的
对于来自其他语言的人来说,另一个常见的令人惊愕之处是 Nushell 的变量是不可变的(事实上,有些人已经开始称它们为 “常量” 来反映这一点)。接触 Nushell,你需要花一些时间来熟悉更多的函数式风格,因为这往往有助于写出与不可变的变量最相容的代码。

你可能想知道为什么 Nushell 使用不可变的变量,在 Nushell 开发的早期,我们决定看看我们能在语言中使用多长时间的以数据为中心的函数式风格。最近,我们在 Nushell 中加入了一个关键的功能,使这些早期的实验显示出其价值:并行性。通过在任何 Nushell 脚本中将each切换到par-each,你就能够在 “输入” 上并行地运行相应的代码块。这是可能的,因为 Nushell 的设计在很大程度上依赖于不可变性、组合和流水线。

Nushell 的变量是不可变的,但这并不意味着无法表达变化。Nushell 大量使用了 “Shadowing” 技术(变量隐藏)。变量隐藏是指创建一个与之前声明的变量同名的新变量,例如,假设你有一个 x 在 当 前 作 用 域 内 , 而 你 想 要 一 个 新 的 x在当前作用域内,而你想要一个新的 xx并将其加 1:

let x = $x + 1

这个新的x对任何跟在这一行后面的代码都是可见的。谨慎地使用变量隐藏可以使变量的使用变得更容易,尽管这不是必须的。

循环计数器是可变变量的另一种常见模式,它被内置于大多数迭代命令中,例如,你可以使用each上的-n标志同时获得每个元素的值和索引:

ls | each -n { |it| " N u m b e r ( "Number ( "Number(it.index) is size ($it.item.size)" }

你也可以使用reduce命令来达到上述目的,其方式与你在循环中修改一个变量相同。例如,如果你想在一个字符串列表中找到最长的字符串,你可以这样做:

[one, two, three, four, five, six] | reduce {|curr, max|
if ( c u r r ∣ s t r l e n g t h ) > ( curr | str length) > ( currstrlength)>(max | str length) {
$curr
} else {
$max
}
}

以 Nushell 的方式思考: 如果你习惯于使用可变的变量来完成不同的任务,那么你将需要一些时间来学习如何以更加函数式的方式来完成每个任务。Nushell 有一套内置的能力来帮助处理这样的模式,学习它们将帮助你以更加 Nushell 的风格来写代码。由此带来的额外的好处是你可以通过并行运行你的部分代码来加速脚本执行。

Nushell 的环境是有作用域的
Nushell 从编译型语言中获得了很多设计灵感,其中一个是语言应该避免全局可变状态。Shell 经常通过修改全局变量来更新环境,但 Nushell 避开了这种方法。

在 Nushell 中,代码块可以控制自己的环境,因此对环境的改变是发生在代码块范围内的。

在实践中,这可以让你用更简洁的代码来处理子目录,例如,如果你想在当前目录下构建每个子项目,你可以运行:

ls | each { |it|
cd $it.name
make
}

cd命令改变了PWD环境变量,这个变量的改变只在当前代码块有效,如此即可允许每次迭代都从当前目录开始,进入下一个子目录。

环境变量具有作用域使命令更可预测,更容易阅读,必要时也更容易调试。Nushell 还提供了一些辅助命令,如def-env、load-env,作为对环境变量进行批量更新的辅助方法。

这里有一个例外,def-env允许你创建一个可以修改并保留调用者环境的命令。

以 Nushell 的方式思考: 在 Nushell 中,没有全局可修改变量的编码最佳实践延伸到了环境变量。使用内置的辅助命令可以让你更容易地处理 Nushell 中的环境变量问题。利用环境变量对代码块具有作用范围这一事实,也可以帮助你写出更简洁的脚本,并与外部命令互动,而不需要在全局环境中添加你不需要的东西。

插件
Nu 可以通过插件进行扩展。插件的行为与 Nu 的内置命令很相似,另外的好处是它们可以与 Nu 本身分开添加。

Nu 的插件是可执行的;Nu 在需要时启动它们,并通过 stdin, stdout 和 stderr插件 - 图1 (opens new window) 与它们进行通信。Nu 的插件可以使用 JSON 或 Cap’n Proto插件 - 图2 (opens new window) 作为它们的通信编码方式。

添加一个插件
要添加一个插件,请调用register命令来告诉 Nu 在哪里可以找到它,与此同时,你还需要告诉 Nushell 这个插件使用什么方式进行编码。

Linux+macOS:

register --encoding=capnp ./my_plugins/my-cool-plugin

Windows:

register --encoding=capnp .\my_plugins\my-cool-plugin.exe

当 register 被调用时:

Nu 启动该插件并通过 stdin 向其发送 “签名” 信息;
插件通过 stdout 响应,包含其签名(名称、描述、参数、标志等)的消息;
Nu 将插件的签名保存在$nu.plugin-path位置的文件中,因此在注册之后的多次启动中都是有效的;
一旦注册,该插件就可以作为你的命令集的一部分被使用:

help commands | where is_plugin == true

示例
Nu 的主版本中包含了一些插件的例子,这些例子对学习插件协议的工作方式很有帮助:
https://github.com/nushell/nushell/tree/main/crates/nu_plugin_example

调试
调试插件的最简单方法是打印到 stderr;插件的标准错误流会通过 Nu 重定向并显示给用户。

帮助
Nu 的插件文档尚在撰写中,如果你对某件事情不确定 Nu Discord插件上的 #plugins 频道是一个提问的好地方!

最后附上nushell地址:

https://github.com/nushell/nushell

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云原生】Prometheus AlertManager讲解与实战操作

文章目录一、概述二、AlertManager 架构三、AlertManager 部署1)下载2)配置3)启动服务4)与Prometheus集成四、在Prometheus中设置告警规则五、AlertManager 告警通道配置一、概述 Prometheus 包含一个报警模块,就是我们…

利用图文和代码深度解析操作系统OS的内存管理实现原理机制和算法

利用图文和代码深度解析操作系统OS的内存管理实现原理机制和算法。 内存作为计算机系统的组成部分,跟开发人员的日常开发活动有着密切的联系,我们平时遇到的Segment Fault、OutOfMemory、Memory Leak、GC等都与它有关。本文所说的内存,指的是计算机系统中的主存(Main Memo…

LIFT: Learned Invariant Feature Transform详细笔记

LIFT: Learned Invariant Feature Transform Paper: LIFT: Learned Invariant Feature Transform | SpringerLink Code: GitHub - cvlab-epfl/LIFT: Code release for the ECCV 2016 paper 文章目录Abstract思路来源LIFT文献来源方法:LIFTPipeline网络架构训练流程…

【网络】网络基础

文章目录依据覆盖范围的网络分类初识网络协议网络协议分层OSI分层模型TCP/IP分层模型网络协议栈中每一层的典型协议和典型设备应用层传输层网络层数据链路层物理层初识IP地址和MAC地址IP地址MAC地址网络是数据传输的解决方案。计算机数量由少变多,计算机由单台机器完…

火爆全球的网红OpenAI ChatGPT注册教程

地址:https://chat.openai.com/ 1. 登陆上去体验 写代码问题 Could you help me to write a C function to upload a file to ASW S3?回复 带代码和注释 Sure, here is an example of how you might write a C function to upload a file to Amazon S3: #incl…

Redis Cluster高可用集群部署

​欢迎光临我的博客查看最新文章: https://river106.cn Redis从3.0开始支持Redis Cluster集群部署,在3.0之前使用哨兵模式来实现Redis集群(利用Sentinel来监控master节点的状态,如果master节点异常,则将其中一台slave切换为master…

C语言中的void

文章目录一.void概要二.void应用场景2.1void能定义变量吗?2.2void这个类型有大小吗?2.3void*能定义变量吗?2.4void*使用2.5void*能不能进行对应的指针运算?2.6void和函数返回值2.7函数void类型的参数一.void概要 void就是空的意思…

多种方法帮你解决tomcat项目部署,idea控制台乱码问题

解决在使用Tomcat过程中idea控制台出现的乱码问题 以下将介绍几种方法(都是小编亲测实用的方法),尝试并寻找适合自己的方法即可 由于我已经处理过了乱码问题,我就重新配置一下 (我有效解决的方案是把-Dfile.encoding…

SQL开窗函数之前后函数(LEAD、LAG)

开窗函数 当我们需要进行一些比较复杂的子查询时,聚合函数就会非常的麻烦,因此可以使用开窗函数进行分组再运用函数查询。窗口函数既可以显示聚集前的数据,也可以显示聚集后的数据,可以在同一行中返回基础行的列值和聚合后的结果…

cubeIDE开发, 全面解析cubeMX图形配置工具

一、cubeIDE 集成cubeMX STM32CubeMX是st公司早期产品,现已经成为STM32Cube开发套件的一部分,直接集成到cubeIDE 开发平台省,是一种芯片引脚图形配置工具,可以非常轻松地配置STM32微控制器和微处理器,以及为Arm Cortex…

java+MySQL基于ssm的公文流转关管理系统

在企业的日常管理过程中,公文管理是日常管理中必不可少的组成部分,其管理水平的高低体现了一个企业管理水平的整体状况。一直以来企业使用传统人工的方式管理公文数据,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,为操作人员带来不少…

python_selenium自动化测试框架

设计思路 本文整理归纳以往的工作中用到的东西,现汇总成基础测试框架提供分享。 框架采用python3 selenium3 PO yaml ddt unittest等技术编写成基础测试框架,能适应日常测试工作需要。 1、使用Page Object模式将页面定位和业务操作分开&#xff0…

cdp4j爬虫自动化学习

cdp4j爬虫自动化学习cdp4j介绍依赖通过识别本地文件进行调试cdp4j介绍 cdp4j是一个Java库,它提供了高级API来通过DevTools协议控制Chrome或Chromium。它可以用于自动使用网页和测试网页。cdp4j默认情况下可以完全运行,但可以配置为运行无头Chrome或Chro…

Spring Cloud Eureka 服务注册中心怎么配置

Eureka,这里是 Spring Cloud Eureka 的简称,是 Spring Cloud Netflix 组件之一。Spring Cloud Netflix 中核心的组件包括了服务治理(Eureka),服务容断(Hystrix),路由(Zuu…

hypermesh和lsdyna联合仿真计算某汽车座椅进行的头冲吸能实验

导读:本案例运用hypermesh和lsdyna联合仿真,主要是针对某座椅进行的头冲吸能实验的仿真计算。这个工况考察座椅背部的塑料件的破坏情况,以及头部模块的加速度情况,达到保护人头部的效果。 本案例用户可以学习到: 1…

大学生程序设计创新实践基地2022年冬季校赛(NPU ACM Winter Contest)

大学生程序设计创新实践基地2022年冬季校赛(NPU ACM Winter Contest) 总述 总体考察对于板子的熟练变换,以及考察离谱地使用python和对getchar()以及EOF的基础掌握程度。 B,D,E是防AK题目。 题解 A死锁 ​ input…

【第九章 SQL优化_插入数据,主键优化,order by优化】

第九章 SQL优化_插入数据,主键优化,order by优化 1.插入数据: (1)insert: (1)批量插入数据: Insert into tb_test values(1,Tom),(2,Cat),(3,Jerry); (2&am…

PyTorch(五)神经网络基础

文章目录Log一、Containers 基本骨架1. Module2. Sequential二、 Convolution Layers 卷积层1. torch.nn.functional① Conv2d2. torch.nn① Conv2d三、Pooling layers 池化层1. nn.MaxPool2d 下采样(最大池化)四、Non-linear Activations 非线性激活1. …

2022CCSP T1最少充电次数

记录第一次CCSP竞赛。一共3题,只做出第一题,用时3h30m(累),ac了开心地吃了个午饭。然而饭饱之后,大脑完全提不起神看着题面昏昏欲睡。第二题是虚拟内存,超级大模拟,刚好这个学期学os…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java流浪动物救助网站a1wsz

毕业设计也不需要做多高端的程序,毕业设计对于大多数同学来说,为什么感觉到难,最重要的一个原因,那就是理论课到实践课的转变,很多人一下不适应,本能开始拒绝,如果是一个考试,大家都…