shellスクリプトでaliasを使用する
2926 ワード
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の使い方は以下の通りです.
alias拡張機能のオプション名はexpand_aliases、インタラクティブモードでこのオプションがオンになっているかどうかを確認できます.
インタラクティブモードではalias拡張機能がオンになっていることがわかります.そのため、aliasエイリアスを使用することができます.
非インタラクティブモードでのalias拡張の設定を検証するスクリプトを作成します.
スクリプトの実行結果は次のとおりです.
非インタラクティブモードではalias拡張機能はデフォルトでオフになっていますが、shoptでオンにすることができます.
またalias別名は現在のshellのみ有効であり,shellに継承されず,環境変数のようにexportすることもできない.aliasの別名定義を書くことができます.bashrcファイルでは、インタラクティブなサブシェルを起動するとサブシェルが読み出す.bashrcは、alias別名定義を得る.ただしshellスクリプトを実行する場合、起動したサブshellは非インタラクティブモードである、読み取れない.bashrcの.
ただし、shellスクリプトを実行するサブshellを読み込む必要がある場合は、bashrcでは、shellスクリプトの最初の行の解釈器にパラメータを追加できます.
--loginはスクリプトを実行するサブshellをlogin shellにし、login shellはシステムとユーザーのprofileとrcファイルを読み取るので、ユーザーがカスタマイズする.bashrcファイルの内容は、スクリプトを実行するサブshellで有効になります.
スクリプトを実行するshellを読み込む簡単な方法もあります.bashrc,スクリプトでアクティブsource~/.bashrcでいいです.
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でいいです.