次のスクリプトがあります。 a
が任意の文字列値であり、b
がパスであると想定される単純なテストケースです。
#!/bin/bash
alias jo "\
echo "please enter values "\
read a \
read -e b \
echo "My values are $a and $b""
ただし、。/ sample.shを実行しようとすると、次のエラーが発生します。
./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
そして、source sample.sh
を試してみると、次のようになります:
a: Undefined variable.
私の目的は、これをエイリアスにして、このスクリプトを入手し、エイリアスを実行してコマンド行を実行できるようにすることでした。誰かがこれを見て、エラーを教えてください。
ここにいくつか問題があります
csh
とは異なり、bash
(および他のBourneのようなシェル)では、エイリアスには=
記号が割り当てられます。 alias foo=bar
引用符をそのようにネストすることはできません。この場合、エイリアスを一重引用符で囲み、内部で二重引用符を使用できます
バックスラッシュ\
は行継続文字です:構文的には、コマンドをsingle行(必要なものの反対)
そう
#!/bin/bash
alias jo='
echo "please enter values "
read a
read -e b
echo "My values are $a and $b"'
テスト:最初にファイルを入手します:
$ . ./myscript.sh
それから
$ jo
please enter values
foo bar
baz
My values are foo bar and baz
エイリアスをスクリプト内で使用する場合、エイリアスはインタラクティブシェルでデフォルトでのみ有効になっていることに注意してください:スクリプト内でエイリアスを有効にするには追加する必要があります
shopt -s expand_aliases
上記のすべてに関係なく、このようなもののエイリアスではなくシェル関数の使用を検討する必要があります
POSIXタイプのシェルで関数を使用することに慣れてください。引用の問題はありません:
jo () {
read -p "Enter value for 'a': " -e a
read -p "Enter value for 'b': " -e b
echo "My values are $a and $b"
}