次のスクリプトを確認してください。
#!/bin/bash
if true;then
alias WeirdTest='uptime';shopt -s expand_aliases
WeirdTest
fi
WeirdTest
初めてWeirdTest
実行すると、「コマンドが見つかりません」と表示されます。
答え1
これはbashの制限です。マニュアル引用:
エイリアスの定義と使用に関する規則は多少混乱しています。
Bash はコマンドを読み取るとエイリアスを拡張します。この意味では、コマンドはif … fi
完全なコマンド(完全なブロックは複合コマンドです)と完全な行(したがって… fi; WeirdTest
改行を追加する代わりに、後に書くとfi
2番目の発生WierdTest
も拡張されません)で構成されます。スクリプトからif
コマンドを読み取ると、WeirdTest
エイリアスはまだ存在しません。
考えられる解決策は関数を定義することです。
if …; then
WeirdTest () { uptime; }
WeirdTest
fi
WeirdTest
同じ名前の外部コマンドを呼び出すためにエイリアスを使用するには、関数のcommand
前に追加するだけです。
WeirdTest () { command WeirdTest --extra-option "$@"; }