4 Shels Linux intéressants et inhabituels
Agence web » Actualités du digital » 4 Shels Linux intéressants et inhabituels

4 Shels Linux intéressants et inhabituels

En tant qu'utilisateur Linux, vous exécutez probablement des commandes dans votre terminal en utilisant l'un des deux shells: bash ou zsh. Peut-être que vous avez entendu parler de leurs prédécesseurs, comme SH ou CSH; Vous pourriez même être conscient de coquilles plus récentes comme le poisson. Mais qu'en est-il de ces alternatives modernes: peuvent-ils faire une différence significative pour votre travail quotidien?

Poisson: la coquille interactive amicale

La coquille de poisson est l'une des alternatives modernes les plus connues à la coquille que votre distribution utilise par défaut. Il met l'accent sur les fonctionnalités conviviales, avec l'achèvement de l'onglet puissant, la mise en évidence de la syntaxe et les suggestions de commandes.

Le poisson est disponible pour Linux et MacOS, donc commencer à l'utiliser peut être aussi simple que de courir infusion d'installation ou Fish d'installation apt-get.

Si vous êtes familier avec l'excellente complétion de l'onglet de ZSH, le poisson vous fera vous sentir comme chez vous. Commencez à taper une commande, et les poissons suggèrent un achèvement, en gris, après les personnages que vous avez déjà tapés:

Cette complétion suggérée est basée sur l'historique de votre commande et les chemins de fichier valides, il est donc souvent très utile. Tapez plus de lettres et les poissons affineront sa suggestion. Vous pouvez accepter la suggestion en appuyant sur la droite, et appuyer sur l'onglet vous donnera un ensemble d'options que vous pouvez naviguer à l'aide des touches du curseur:

Si vous affichez des suggestions pour la commande elle-même, vous verrez toutes les commandes correspondantes, avec des informations sur ce que chacun d'eux fait:

Vous pouvez également utiliser la fonctionnalité automatique pour afficher les options disponibles en appuyant sur l'onglet après un seul caractère:

Le poisson est très configurable, mais il prend souvent une approche différente des coquilles plus courantes comme Bash et Zsh. Par exemple, la personnalisation de votre invite est l'une des premières choses que vous apprendrez à faire lorsque vous commencez à utiliser le terminal, mais les navires à poissons avec une invite assez unique par défaut:

Cette invite abréviate les noms de répertoire dans la hiérarchie actuelle dans une seule lettre et imprime le nom de la branche si vous êtes dans un référentiel GIT, il est donc assez utile par défaut. Mais vous pouvez également modifier l'invite à l'aide d'une fonction de poisson, en tapant ce qui suit sur la ligne de commande:

        function fish_prompt; echo "% "; end

L'approche fonctionnelle est assez étape par rapport à la PS1 de Bash, qui est une variable de chaîne avec une syntaxe prédéfinie.

De même, bien que les poissons soutiennent la variable de chemin un peu comme les autres coquilles, il s'agit en fait d'une variable de liste sous le capot, pas d'une chaîne. Cela permet de faciliter la modification, avec une fonction d'assistance nommée fish_add_path:

        fish_add_path ~/myprogs

Une façon amicale de configurer les poissons est fournie via son interface Web. Courir simplement fish_config Depuis la ligne de commande, et le poisson ouvrira une fenêtre de navigateur avec une interface utilisateur de base qui vous permet de modifier divers paramètres:

Vous devrez être conscient des différences de Fish, en particulier pour les caractéristiques communes que vous connaissez peut-être. Par exemple, je fais un usage intensif de Bash's! $ Pour répéter le dernier argument de la commande précédente, par exemple

        ls README.md
wc -l !$

Le poisson ne prend pas en charge la même chose! $ – il ne supporte pas non plus 0 $, $? ($ statut est utilisé à la place), ni !!. Vous pouvez insérer le dernier argument de la commande précédente avec Alt + Up, et il y a des équivalents pour la plupart des autres, mais vous devrez peut-être adapter un comportement très ancré pour vous habituer à ces alternatives.

En raison de ces différences, le poisson n'est pas conforme à POSIX, ce qui signifie que ses scripts ne sont pas compatibles avec des coquilles conformes à POSIX comme Bash et Zsh.

Murex: intuitif et contenu

Murex est un shell assez nouveau (2017), écrit dans Go. Ce shell a une prise en charge native pour des formats de données complexes, y compris des objets de dictionnaire, CSV et JSON. Cela signifie que vous pouvez faire des choses comme:

        object = %{ color: "red", "size": "large" }

Le code ci-dessus définit une variable JSON que vous pouvez utiliser tout comme vous utilisez un objet structuré en javascript:

Pour utiliser son approche plus structurée, Murex propose ses propres alternatives aux commandes communes. Par exemple, le F intérim est similaire à la commande LS; Il répertorie les fichiers dans le répertoire actuel, filtré par l'un des nombreux drapeaux disponibles:

        f +f     
f +x -d

La grande différence ici, cependant, est que la sortie est un tableau JSON au lieu d'une liste de chaînes:

        f +s
    

De même, la commande G effectue le même type d'opération globbing auquel vous serez habitué à Bash:

        g *.md

Vous pouvez utiliser la syntaxe des tuyaux étendus de Murex pour travailler avec des données structurées à partir des commandes. Les coquilles Unix traditionnelles passent des données par le biais de tuyaux en tant que chaînes, mais les types de données plus puissants de Murex ont besoin de tuyaux spéciaux.

Le tuyau générique (=>) ressemble beaucoup à un tuyau classique (|), mais il convertit la sortie en format plus convivial pour les commandes externes qui ne prennent pas en charge les types de données Murex. Par exemple:

Alors que le tuyau traditionnel transforme la sortie de F en une seule ligne, le tuyau générique le forme comme une liste de son contenu, avec un élément par ligne, de sorte que la commande WC peut signaler correctement le nombre d'éléments.

Ce concept fonctionne mieux avec les opérateurs de manipulation de données de Murex. Ceux-ci vous permettent d'accéder et de modifier des données structurées, afin que vous puissiez tuer la sortie d'une commande dans une autre qui reformates qui les données ou qui y fonctionnent davantage. Voici un exemple:

        config | (( /shell/syntax-highlighting ))

Dans cette commande, la syntaxe (()) accède à l'élément imbriqué dans la sortie de la configuration:

Ma plus grande plainte auprès de Murex est sa documentation – ou son manque. Par exemple, l'invite par défaut est simplement « Murex » qui n'est pas très utile. Je suis descendu tout à fait un terrier de lapin essayant de déterminer comment changer cela; Comme le poisson, Murex ne prend pas en charge la variable Norme PS1 standard.

Cependant, contrairement aux poissons, Murex n'explique pas clairement comment changer son invite. J'ai trouvé des informations contradictoires (peut-être obsolètes) sur l'événement OnProprit, qui ressemblait à une manière compliquée (bien que puissante) de définir l'invite, similaire à l'approche fonctionnelle de Fish. Je ne pouvais pas le faire fonctionner, mais j'ai trouvé un paramètre de configuration qui semblait faire ce que je voulais:

        config: set shell prompt {
    exitnum -> !if {
        out "{RESET}{YELLOW}${pwd_short} {GREEN}»{RESET} "
    } else {
        out "{RESET}{YELLOW}${pwd_short} {RED}»{RESET} "
    }
}

Il s'agit d'une invite utile qui montre non seulement une version abrégée du chemin actuel, mais colore également le »symbole en fonction de l'état de la dernière commande. Cependant, je n'ai trouvé aucune documentation sur ce paramètre de configuration; J'ai dû découvrir cet extrait à partir d'un gist github aléatoire.

Nushell: un nouveau type de coquille

De nombreux coquilles sont superficiellement similaires, leurs différences confinées aux caractéristiques de script de bas niveau ou aux changements subtils de syntaxe. Ce n'est pas le cas avec Nushell (NU), un programme Shell écrit en rouille qui a été publié en 2019. Dès que vous exécutez votre premier commandement sous NU, vous verrez une grande différence:

En effet, comme Murex, NU prend en charge les données structurées. Cependant, Nu va plus loin, fournissant ses propres équivalents de commandes (ou de construction) communes comme LS. Cette approche peut produire beaucoup de sortie, bien que le formatage du tableau soit généralement plus facile à lire que la forme de bash normale:

Vous pouvez également utiliser NUSHELL pour tuer les données d'une commande à une autre, en profitant de sa structure. Par exemple, vous pouvez très facilement récupérer et extraire des données d'une API Web à l'aide de deux des intégrés de Nushell, HTTP et Get:

        ~/repos/nushell> http get https://speed.cloudflare.com/meta | get region

La commande get vous permet de traiter les données structurées. Dans ce cas, vous pouvez utiliser un sténographie équivalent:

        (http get https://speed.cloudflare.com/meta).region

Le comportement par défaut de Nushell et l'interface claire et moderne en font un excellent choix pour un shell de nouvelle génération. Il est bien documenté, facile à utiliser et fait généralement ce que vous attendez.

Je n'ai que quelques problèmes avec Nushell. Le premier est assez trivial, compte tenu des coûts de stockage d'aujourd'hui, mais c'est une grosse coquille par rapport aux alternatives: 39 Mo. Pour mettre cela en contexte, Zsh n'est que de 1,3 Mo.

J'ai aussi vu un comportement étrange avec ls -d. Il s'agit d'un appel long car il agit un peu comme DU, résumant la taille totale des répertoires. Mais j'ai vu sa sortie divisée en tables séparées pour une raison inconnue, qui ressemblait à un petit bug.

PowerShell: le shell Windows, maintenant pour tout le monde

PowerShell est un programme Microsoft qui offre aux utilisateurs Windows des capacités similaires aux shells Linux. Bien qu'il soit fortement intégré au système d'exploitation Windows, une version est désormais disponible pour les utilisateurs de Linux et Mac à essayer; En fait, cela le fait depuis 2016.

Vous pouvez installer PowerShell sur Mac en utilisant Homebrew (Brew Install – Cask PowerShell) et sur Linux en utilisant les instructions pour votre distribution particulière. Une fois installé, exécutez-le avec la commande pwsh.

PowerShell apporte avec lui des commandes MS-DOS familières comme Dir:

Combinez-le avec un outil comme l'édition de Microsoft pour Mac et Linux, et vous pourriez presque vous convaincre que vous exécutez MS-DOS, si vous le souhaitez.

Parce que PowerShell est implémenté comme un autre shell, vous aurez toujours accès à des commandes UNIX familières, vous pouvez donc ignorer les équivalents DOS si vous préférez.

La valeur réelle de PowerShell est que, comme Murex et Nushell, il a un puissant modèle de données qui fonctionne sur des objets plutôt que des chaînes. Ceci est plus évident lorsque les commandes de chaînage dans un pipeline:

        Get-ChildItem -Path repos/ov | Select-Object -Property Size

Ici, Get-ChildItem et Select-Object sont des applets de commande, des commandes natives qui effectuent de petites tâches, généralement dans un pipeline. Les applets de commande sont écrits en langues .NET et PowerShell comprend une API que les applets de commande peuvent utiliser pour effectuer des tâches de bas niveau.

PowerShell se sent vraiment comme une explosion du passé à ceux d'entre nous qui se souviennent d'avoir utilisé DOS il y a quarante ans. Mais je ne manque pas vraiment cette expérience; Il y a des raisons pour lesquelles j'ai déménagé à Linux et MacOS, après tout. Cette coquille restera une curiosité intéressante pour moi, mais elle sera forcément plus utile si vous utilisez à la fois Windows et Linux.


Les coquilles alternatives semblent être juste au bord de la percée, sans renverser le géant qui est bash. La plupart d'entre nous s'en tiendront à la coquille par défaut, mais il est agréable d'avoir des options, surtout lorsqu'ils offrent des fonctionnalités uniques et puissantes que ces coquilles. En fin de compte, cependant, je pense qu'ils resteront de niche jusqu'à ce qu'ils embrassent pleinement la conformité POSIX.

★★★★★