web-dev-qa-db-fra.com

Problème lors de la création d'un alias, obtenez des messages étranges

[Relecteurs: notez que la question a été complètement réécrite après les votes serrés.]

J'ai récemment trouvé comment définir des alias pour bash dans le ~/.bashrc.

Mais depuis que j'ai essayé cela, je vois les messages suivants chaque fois que j'ouvre un terminal.

J'ai ajouté quelques alias bash à mon J'essayais de créer des raccourcis en utilisant l'alias mais j'ai échoué et j'ai réussi à obtenir le message ci-dessous à chaque fois que j'ouvre un nouveau terminal.

bash: alias: UIC: not found
bash: alias: =: not found
bash: alias: Sudo openvpn --config ~/vpn/UIC-alopez78.ovpn: not found
bash: alias: mat: not found
bash: alias: =: not found
bash: alias: cd /home/alexisblopez/MATLAB/R2014a/bin/: not found
bash: alias: lab: not found
bash: alias: =: not found
bash: alias: ./matlab: not found
~$ 

C'est déroutant; ça ne dit pas erreur, mais parce que mes alias ne fonctionnent pas,
Je pense que j'ai fait quelque chose de mal avec eux - je ne sais pas quoi!

2
Alexis Lopez

Vous avez probablement défini ces alias dans .bashrc fichier:

alias UIC = 'Sudo openvpn --config ~/vpn/UIC-alopez78.ovpn'
alias mat = 'cd /home/alexisblopez/MATLAB/R2014a/bin/'
alias lab = './matlab'

Vous devez modifier .bashrc et supprimer l'espace avant et après =:

alias UIC='Sudo openvpn --config ~/vpn/UIC-alopez78.ovpn'
alias mat='cd /home/alexisblopez/MATLAB/R2014a/bin/'
alias lab='./matlab'

enregistrez vos modifications et exécutez source .bashrc

3
Lety

Les messages d'erreur semblent intéressants.
Les lignes

bash: alias: =: not found

c'est-à-dire: bash nous donne le message que sa commande intégrée, alias, lui a donné le message "not found" pour quelque chose nommé "=".

Maintenant, alias est impliqué, et il y a = dans un endroit où il est confondu avec une commande. Pour le = pour être traité comme une commande, il doit s'agir d'un seul mot, avec des espaces.

Et en regardant la syntaxe de la commande alias (voir help alias ci-dessous), c'est faux: le = doit être utilisé sans espaces autour, comme ceci:

alias foo='bar baz'

Donc, l'idée est qu'il existe des définitions d'alias qui ont un espace supplémentaire autour de =, qui sépare l'argument d'une ligne de commande de alias en trois arguments.

Faisons une expérience: pouvons-nous reproduire votre message d'erreur comme celui-ci?

$ alias mat = 'foo bar'
bash: alias: mat: not found
bash: alias: =: not found
bash: alias: foo bar: not found

Oui!

La commande intégrée d'alias essaie d'afficher les définitions des trois alias mat, =, et foo bar, comme demandé, et se plaint de ne pas les trouver.


Solution: lire help alias, recherchez les définitions d'alias et supprimez l'espace autour de =.


$ help alias
alias: alias [-p] [name[=value] ... ]
    Define or display aliases.

    Without arguments, `alias' prints the list of aliases in the reusable
    form `alias NAME=VALUE' on standard output.

    Otherwise, an alias is defined for each NAME whose VALUE is given.
    A trailing space in VALUE causes the next Word to be checked for
    alias substitution when the alias is expanded.

    Options:
      -p        Print all defined aliases in a reusable format

    Exit Status:
    alias returns true unless a NAME is supplied for which no alias has been
    defined.
1
Volker Siegel