Création d'un alias pour un script bash

10

J'ai donc essayé et créé un aliasin .bashrc. Cependant, lorsque je teste la commande, j'obtiens:

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

Voici ce que j'ai dans le .bashrcdossier:

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

Le plus drôle, c'est que lorsque j'ai créé l'alias vi, cela a fonctionné. Mais le menu ne fonctionne pas. J'ai recherché les messages précédents sur UnixStackExchange et tenté de suivre d'autres messages, mais en vain. Quelqu'un d'autre a-t-il des suggestions?

ryekayo
la source
1
avez-vous essayé avec l'alias menu = 'bash ./menuScript.sh'? (Je ne suis pas dans une machine Linux, je ne peux pas le tester)
Con7e
D'où utilisez-vous le menu? Si ce n'est pas le même répertoire que 'menuScript.sh' alors il se plaindra d'une 'commande introuvable'. Vous devriez peut-être utiliser un chemin absolu?
garethTheRed
1
@garethTheRed Ça dirait./menuScript.sh: command not found
Michael Mrozek
@MichaelMrozek - juste. Je viens de vérifier et il a dit No such file or directory, ce qui n'est toujours pas la même chose que l'erreur de l'OP. Le point est toujours valable - il serait préférable d'avoir un chemin absolu à moins que l'alias ne soit toujours utilisé qu'à partir du répertoire où menuScript.shréside.
garethTheRed
1
@ryekayo done :)
Con7e

Réponses:

9

Vous devriez essayer avec alias menu='bash ./menuScript.sh'. Je ne suis pas actuellement sur une machine Linux, je ne peux donc pas le tester moi-même, mais cela devrait fonctionner. Lorsque vous appelez l'alias, il ne sait pas quoi faire du chemin, vous devez donc inclure le bashau début.

Et la réinitialisation du terminal aide après la modification.

Con7e
la source
Je ne comprends pas l'importance du premier paragraphe - à moins qu'il menuScript.shn'ait pas été chmodédité en exécutable, auquel cas le message d'erreur aurait été «Autorisation refusée». Je soupçonne que forcer une relecture du .bashrcfichier est la réponse. ………………… PS Le shell sait quoi faire du chemin de la même manière que si l'utilisateur tape ./menuScript.sh- en essayant d'exécuter le fichier.
Scott
7

Quand tu fais

alias menu='./menuScript.sh'

vous créez un alias qui dit "ce fichier" mais ne dit pas quoi faire avec.

Cependant, si vous le faites

alias menu='source ./menuScript.sh'

ou

alias menu='. ./menuScript.sh'

Vous dites exécuter ce fichier.

Michael Durrant
la source
6

Vous êtes-vous souvenu d'avoir source votre fichier ~ / .bashrc après avoir apporté les modifications? Parce que les modifications prennent effet dans votre fichier .bashrc après le redémarrage de votre ordinateur ou simplement le sourcing du fichier.

cbora
la source
2
Ce type de message semble être plus adapté à un commentaire.
HalosGhost
2
@HalosGhost Comment figurez-vous? C'est la première chose à laquelle je penserais aussi, ça provoquerait exactement ça
Michael Mrozek
@MichaelMrozek, je suggère cela uniquement parce qu'il me semble que les messages de réponse devraient offrir une solution définitive, par exemple, "Vous avez oublié de vous approvisionner .bashrc, faites ce qui suit ...". D'un autre côté, les questions de clarification (par exemple, "Avez-vous oublié de…?") Semblent plus adaptées aux commentaires. Il ne faudrait pas beaucoup de reformulation pour que ce message semble beaucoup plus adapté à une réponse.
HalosGhost
Bien que le redémarrage de votre ordinateur fasse l'affaire, il vous suffit de vous déconnecter de tty ou de votre session (si vous utilisez un gestionnaire de connexion). Si vous êtes connecté à un environnement graphique et que vous ne voulez pas source ~/.bashrcou . ~/.bashrc, vous pouvez également ouvrir un autre shell également. C'est aussi simple que ça. Aucun redémarrage requis.
Dylan
0

La raison pour laquelle cela a fonctionné vimest parce que c'est un programme déjà appelable sans chemin direct. Vous n'avez pas à dire explicitement "je veux que cela soit exécuté en tant que programme" car il en vimest déjà un. Il est codé en dur dans le système d'exploitation que lorsqu'il reçoit la commande vim, allez exécuter le fichier /usr/bin/viou où que se trouve le programme réel.

Nathanael Morgan
la source
Euh, non, ce n'est pas codé en dur dans le système d'exploitation. Il existe un fichier appelé vimdisponible dans le $PATHqui peut être un exécutable binaire, un script exécutable ou même un lien symbolique vers un autre programme. Si vous supprimez l'entrée pour vimelle cesse d'être disponible pour les utilisateurs.
roaima
@roaima Ce que je voulais dire, c'est qu'appeler vim est légèrement différent que d'appeler un programme personnalisé. Je vois ce que vous voulez dire, cependant, et je suis d'accord
Nathanael Morgan
J'ai un script appelé ifviqui vit dans mon $HOME/bin(qui se trouve être dans le mien $PATH). Je l'utilise simplement de la même manière que je pourrais exécuter un binaire installé par le système. Peu importe que ce soit un programme personnalisé.
roaima
0

Il y a deux problèmes avec l'alias

alias menu='./menuScript.sh'
  1. Il vous oblige à être dans un répertoire particulier lorsque vous appelez l'alias. Si vous êtes dans un répertoire où menuScript.shn'existe pas, l'alias ne s'exécutera pas.

    Il serait préférable de spécifier le chemin absolu complet du menuScript.shscript lors de la définition de l'alias, par exemple

    alias menu="$HOME/local/bin/menuScript.sh"

    ou similaire.

  2. Comme d'autres l'ont déjà dit, une autre raison pour laquelle l'alias peut échouer est que le script n'est pas exécutable ou qu'il a une #!ligne invalide . Assurez-vous que le script est exécutable avec

    chmod +x menuScript.sh

    et que la première ligne du script est

    #!/bin/bash

    ou quel que soit le chemin d'accès bash(ou quel que soit le shell pour lequel le script est écrit) sur votre système.

Kusalananda
la source