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'
Jason Basanese
la source
//, 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
heemayl
la source
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 -;}

CijcoSistems
la source
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