Command-Line

擁有互動式 shell 體驗,但通過 dash 執行所有內容

  • July 6, 2021

所以我開始沉迷於 POSIX 標準和簡單性,但我討厭沒有使用箭頭來自動完成字元,我想要一個很酷的 shell 提示符。

所以無論如何我可以在前端有魚或Zsh甚至bash之類的東西,這樣我就可以有自動完成功能,一個很好且資訊豐富的提示,能夠在命令上前進和後退,但是當我按下輸入命令本身是由 Dash 而不是互動式執行的,除非腳本在 shebang 中需要 bash fish 等?

我只是想在輸入命令時感到舒服,其餘的可能很苛刻和簡單我正在使用 Konsole,儘管我正在考慮更改為允許 Überzug 的控制台提示符(是的,我知道 GUI 的存在是有原因的,它只是為了 LF)也忘記了雖然 sh 重定向到 konsole 上的 dash 我告訴它去 bash

我想我可能誤解了你的問題,因為你所要求的似乎幾乎是大多數人的運作方式。我們使用互動式外殼進行互動。但我們希望腳本通常由不同的 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。

不是這種情況的一個領域是需要source的腳本,因為它們會更改目前 shell 實例的環境。這些不會由 shebang 指定的解釋器執行,而是互動式 shell 本身執行。我自己很少發現這是一個問題,因為我使用的大多數軟體都在fish需要時提供了一個配置文件。但是在極少數情況下,當您確實需要獲取 POSIX 文件時,有一些實用程序(例如bass和其他工具)可以幫助您執行此操作。

對於bashand zsh,這甚至不是問題,因為大多數配置文件都寫入了最低公分母,它們可以在“接近 POSIX 到無關緊要”的 Zsh 和 bash 中獲取.

引用自:https://unix.stackexchange.com/questions/656959