拥有交互式 shell 体验,但通过 dash 运行所有内容

拥有交互式 shell 体验,但通过 dash 运行所有内容

所以我开始沉迷于 POSIX 标准和简单性,但我讨厌没有使用箭头自动完成字符来浏览字符,我想要一个很酷的 shell 提示。

那么无论如何,我可以在前端有一些像 Fish 或 Zsh 甚至 bash 这样的东西,这样我就可以自动完成,这是一个很好且信息丰富的提示,能够使用箭头在命令上前进和后退,但是当我按 Enter 时命令本身是由 Dash 运行的,而不是交互式的东西,除非脚本需要在 shebang 中使用 bash Fish 等?

我只是想在输入命令时感觉舒服,其余的可能会很苛刻和简单我正在使用 Konsole,尽管我正在考虑更改为允许 Überzug 的控制台提示符(是的,我知道 GUI 的存在是有原因的,它的只是为了 LF)也忘记了,虽然 sh 重定向到 konsole 上的 dash,但我告诉它去 bash

答案1

我想我可能误解了你的问题,因为你似乎要求的是大多数人的操作方式。我们使用交互式 shell 来进行交互。但我们期望脚本通常由不同的 shell 运行。

这通常“有效”,因为广阔的您将执行的大多数脚本都将包含 shebang 行。这样脚本本身就可以请求解释器最接近的到它需要的功能集。如果需要 POSIX 兼容性,则应指定:

#!/usr/bin/sh

或者

#!/usr/bin/env sh

这可能是dash(在 Debian/Ubuntu 版本上),也可能是 BusyBox ash(在 Alpine 上),或者其他东西。由发行版本身决定sh默认提供的最符合 POSIX 标准的 shell。在遥远的过去,在某些(大多数?)情况下,这甚至是bash

在极少数情况下,有人遗漏了 shebang,首先,请对其余代码质量持怀疑态度。但运行它不是问题——只是sh scriptname.sh

但没有人期望您能够在当今的基本 shell 下真正进行交互式操作。就我个人而言,我使用fish,这是您提到的距离任何形式的 POSIX 合规性最远的。但fish如果我需要可移植性,我可以使用(最好是,因为它具有更现代化的脚本语言)或 POSIX编写脚本。这并不重要,因为是 shebang 来处理这件事。

情况并非如此的一个区域是需要的脚本来源,因为它们改变了当前 shell 实例的环境。这些不会使用 shebang 指定的解释器执行,但是由交互式 shell 本身执行。我自己很少发现这是一个问题,因为我使用的大多数软件都会fish在需要时提供配置文件。但在极少数情况下,当您确实需要获取 POSIX 文件时,可以使用诸如低音以及其他人来帮助您做到这一点。

对于bashzsh,这甚至不是问题,因为大多数配置文件都写入最小公分母,它们可以在“足够接近 POSIX-to-not-matter”的 Zsh 和 bash 中获取。

相关内容