Est-il possible de faire du sable avec des alias?


8

Je cherche un moyen de faire fonctionner l'alias suivant pour n'importe quel nom de fichier.

alias dim='cd /home/jason/Documents; vim *the desired file*; cd'

Je me demande s'il y a un moyen de changer cet alias pour que je puisse taper n'importe quel nom de fichier en tant que tel:

dim *the desired file*

Et obtenez toujours le même résultat. Fondamentalement, existe-t-il un moyen d'appeler ce qui est tapé après le nom d'alias dans l'alias lui-même? Quelque chose comme:

alias dim='cd /home/jason/Documents; vim <what is typed after alias>; cd'

//, Quel était le but de cela?
Nathan Basanese

Réponses:


8

Non, vous ne pouvez pas faire cela en utilisant des alias de shell. Vous devez utiliser une fonction.

Voici une fonction simple pour faire le travail:

dim() {
cd /home/jason/Documents
vim "$1"
cd
}

La fonction dimprendra un nom de fichier comme argument. Vous pouvez mettre cet extrait de code à la fin de votre ~/.bashrcfichier, puis l'exécuter en tant que:

dim file.txt

Remplacez-le file.txtpar le nom de fichier que vous souhaitez.

Pour l'exécuter à partir de la session shell actuelle, sourcele ~/.bashrcfichier commence par:

. ~/.bashrc

3
Que signifie le «$ 1»? Je suis un débutant et j'essaie d'apprendre plutôt que de simplement copier-coller et de l'appeler un jour.
Jason Basanese

1
@JasonBasanese J'apprécie votre décision :) $1indique le premier paramètre positionnel ou argument de la fonction..pensez-y comme un moyen de donner une entrée à une fonction ou un script ..comme tous les langages de programmation bashutilisent également cela .... vous trouver de nombreuses ressources à ce sujet sur Google ..
heemayl

3

Pas avec des alias, utilisez plutôt des fonctions.

Depuis la page de manuel de Bash :

ALIASES

[...] Il n'y a pas de mécanisme pour utiliser des arguments dans le texte de remplacement. Si des arguments sont nécessaires, une fonction shell doit être utilisée (voir FONCTIONS ci-dessous).

Votre fonction pourrait donc être:

fonction dim () {cd ~ jason / Documents; vim $ *; cd -;}


1
~ / Les documents ne fonctionneraient-ils pas très bien dans ce cas? Que signifient également les symboles $ et * dans ce cas? et le - après le cd est-il nécessaire? Habituellement, je peux simplement taper cd et il monte dans un répertoire.
Jason Basanese

«Habituellement, je peux simplement taper cd et il monte dans un répertoire» - je ne connais qu'un simple cdpour vous amener à votre répertoire personnel; cd ..monte d'un niveau. cd -vous ramène au répertoire précédent à partir duquel vous avez cdédité.
Chriki

1
@JasonBasanese: Oui ~ / Les documents fonctionneraient pour tout le monde (si c'est une fonction pour tous les utilisateurs). $*c'est comme $1 $2 $3...donner simplement toute la liste à vim, pas le premier argument que vous tapez. Et comme l'a dit Chriki, cd -reviendra au répertoire précédent (celui que vous étiez lorsque vous avez appelé la fonction).
CijcoSistems
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.