shellスクリプトでaliasを使用する


Linux shellには、インタラクティブと非インタラクティブの2つの動作モードがあります.shell入力コマンドを日常的に使用して結果を得る方法はインタラクティブであり、shellスクリプトは非インタラクティブである.
shellはalias機能を提供し、私たちの日常的な操作を簡素化し、複雑なコマンドに簡単な名前をつけることができ、仕事の効率を高めることができます.インタラクティブモードではshellのalias拡張機能がオンになっているので、自分で定義したalias別名を入力して対応するコマンドを実行できます.
ただし、非インタラクティブモードではalias拡張機能はデフォルトでオフになっています.この場合もaliasエイリアスを定義できますが、shellはaliasエイリアスを対応するコマンドに拡張するのではなく、aliasエイリアス自体をコマンドとして実行します.shell内蔵コマンドとPATHにaliasエイリアスと同じ名前のコマンドがない場合、shellは指定したコマンドが見つかりません.では、非インタラクティブモードでalias拡張を有効にする方法はありますか?答えはshell内蔵コマンドshoptコマンドを使用してalias拡張オプションを開くことです.shoptはshellの内蔵コマンドで、shell機能オプションのオンとオフを制御し、shellの動作を制御します.shoptの使い方は以下の通りです.1 shopt   -s opt_name                 Enable ( set ) opt_name. 2 shopt   -u opt_name                 Disable ( unset ) opt_name. 3 shopt   opt_name                    Show current status of opt_name.
alias拡張機能のオプション名はexpand_aliases、インタラクティブモードでこのオプションがオンになっているかどうかを確認できます.1 sw@gentoo ~ $  shopt   expand_aliases 2 expand_aliases  on 3 sw@gentoo ~ $
インタラクティブモードではalias拡張機能がオンになっていることがわかります.そのため、aliasエイリアスを使用することができます.
非インタラクティブモードでのalias拡張の設定を検証するスクリプトを作成します.1 #!/bin/bash --login 2 3 alias   echo_hello= "echo Hello!" 4 shopt   expand_aliases   5 echo_hello 6 7 shopt   -s  expand_aliases  8 shopt   expand_aliases   9 echo_hello
スクリプトの実行結果は次のとおりです.1 sw@gentoo ~ $ . /test .sh 2 expand_aliases  off 3 . /test .sh: line 5: echo_hello:  command   not found 4 expand_aliases  on 5 Hello! 6 sw@gentoo ~ $
非インタラクティブモードではalias拡張機能はデフォルトでオフになっていますが、shoptでオンにすることができます.
またalias別名は現在のshellのみ有効であり,shellに継承されず,環境変数のようにexportすることもできない.aliasの別名定義を書くことができます.bashrcファイルでは、インタラクティブなサブシェルを起動するとサブシェルが読み出す.bashrcは、alias別名定義を得る.ただしshellスクリプトを実行する場合、起動したサブshellは非インタラクティブモードである、読み取れない.bashrcの.
ただし、shellスクリプトを実行するサブshellを読み込む必要がある場合は、bashrcでは、shellスクリプトの最初の行の解釈器にパラメータを追加できます.1 #!/bin/bash --login
--loginはスクリプトを実行するサブshellをlogin shellにし、login shellはシステムとユーザーのprofileとrcファイルを読み取るので、ユーザーがカスタマイズする.bashrcファイルの内容は、スクリプトを実行するサブshellで有効になります.
スクリプトを実行するshellを読み込む簡単な方法もあります.bashrc,スクリプトでアクティブsource~/.bashrcでいいです.