J'ai le script suivant. Il s’agit d’un cas de test simple où a
est une valeur de chaîne et b
est supposé être un chemin.
#!/bin/bash
alias jo "\
echo "please enter values "\
read a \
read -e b \
echo "My values are $a and $b""
Cependant, chaque fois que j'essaie d'exécuter ./sample.sh, j'obtiens les erreurs suivantes:
./sample.sh: line 3: alias: jo: not found
./sample.sh: line 3: alias: echo please: not found
./sample.sh: line 3: alias: enter: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: read a read -e b echo My: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: are: not found
./sample.sh: line 3: alias: and: not found
./sample.sh: line 3: alias: : not found
et quand j'essaie source sample.sh
j'obtiens ce qui suit:
a: Undefined variable.
Mon but était de faire de ce pseudo un alias afin que je puisse obtenir ce script et le lancer pour exécuter la ligne de commandes. Quelqu'un peut-il regarder cela et me laisser savoir quelle est l'erreur?
Vous avez quelques problèmes ici
contrairement à csh
, à bash
(et à d'autres shells de type Bourne), les alias sont affectés d'un signe =
, par exemple. alias foo=bar
les citations ne peuvent pas être imbriquées comme ça; dans ce cas, vous pouvez utiliser des guillemets simples autour de l'alias et des guillemets doubles à l'intérieur
la barre oblique inverse \
est un caractère continuation de ligne : syntaxiquement, votre commande est transformée en un simple ligne (le contraire de ce que vous voulez)
Alors
#!/bin/bash
alias jo='
echo "please enter values "
read a
read -e b
echo "My values are $a and $b"'
Test: d'abord nous source le fichier:
$ . ./myscript.sh
puis
$ jo
please enter values
foo bar
baz
My values are foo bar and baz
Si vous souhaitez utiliser l'alias dans un script, rappelez-vous que les alias ne sont activés que par défaut dans les shells interactifs: pour les activer dans un script, vous devez besoin d'ajouter
shopt -s expand_aliases
Indépendamment de tout ce qui précède, vous devriez envisager d'utiliser une fonction Shell plutôt qu'un alias pour des choses comme celle-ci
Habituez-vous à utiliser des fonctions dans le shell de type POSIX. Vous n'avez aucun des problèmes de citation:
jo () {
read -p "Enter value for 'a': " -e a
read -p "Enter value for 'b': " -e b
echo "My values are $a and $b"
}