web-dev-qa-db-fra.com

Différences entre fish et bash pour passer des arguments en ligne de commande à des fonctions alias?

Des réponses à mon autre question ici j’ai appris la possibilité de passer des arguments en ligne de commande à une fonction alias dans Bash.

Dans Fish, je peux éditer un alias en modifiant le fichier config.fish du répertoire ~/.config/fish et en ajoutant une ligne comme celle-ci.

alias lsp='ls -ah --color=always | less -R;'

et cela fonctionne parfaitement. Cela devrait être équivalent à éditer ~/.bash_aliases dans bash

Mais quand j'essaie de configurer une fonction alias pour passer des arguments comme celui-ci

alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'

ça ne marche pas pour le poisson?

Existe-t-il des différences entre fish et bash dans la manière de configurer un alias pour transmettre des arguments en ligne de commande empêchant ce second alias de fonctionner avec fish au lieu de bash?

7
NES

Cette seconde commande est en réalité un petit script bash. Bash est le langage de programmation intégré au shell. Il est utilisé par d'autres obus, mais pas nécessairement, comme on le voit ici.

Fish définit un langage de programmation complètement différent de bash, bien qu'il prenne en charge simple alias sous la forme habituelle alias name=command; Vous devriez plutôt définir une fonction. Voici comment vous définiriez la fonction ci-dessus dans le poisson:

stefano@lenovo ~> function lsp
                      ls -ah --color=always $argv | less -R
                  end

et funcsave lsp afin de le sauvegarder définitivement.

Vous pouvez maintenant exécuter les commandes attendues, telles que lsp, lsp -R, lsp *.png* et ainsi de suite.

Vous pouvez également "appeler" bash pour exécuter un script pour vous, en utilisant le programme "sh" (cela lancera "dash" pour être précis). Mais si vous utilisez du poisson, il est probable que vous souhaitiez utiliser les méthodes proposées. Je viens de le tester pour la première fois et je suis très impressionné jusqu'à présent.

Les fonctions sont stockées sous forme de fichier dans .config/fish/functions/ de votre répertoire personnel. Le nom du fichier sera, dans cet exemple, lsp.fish. Vous pouvez soit éditer le fichier, redémarrer Fish par la suite, soit simplement définir et sauvegarder à nouveau la fonction.

La meilleure façon d’apprendre le poisson est de lire son aide intégrée. Dans le poisson, il suffit de taper

help

et vous obtiendrez un manuel très bien formaté, complet et facile à lire. En fait, cela ouvre le navigateur Web w3m, car l'aide est au format html:

alt text

(appuyez sur q-y pour sortir)

9
Stefano Palazzo

Je n'ai jamais vu un engin comme celui-là auparavant.

alias lsp='_(){ ls -ah --color=always $* | less -R; }; _'

Un alias qui déclare une fonction et l'exécute. Vous devriez juste faire une fonction en premier lieu. Dans bash, les fonctions remplacent les alias dans presque tous les sens.

lsp() { ls -ah --color=always "$@" | less -R; }

Mettez cela dans votre fichier ~/.bashrc, ou si vous préférez placer les fonctions dans un fichier séparé, comme ~/.bash_functions, vous pouvez le faire, mais vous devez source ce fichier à partir de ~/.bashrc

2
geirha