質問: linuxでaliasをbashrcに記載してsh linuxでaliasをbashrc(bashrcでなくともログイン時に読み込まれるprofile)に記載してあるコマンドを設定したいのですが、これが上手くいきません。 やりたいことは、bashrcで設定したコマンド内容をshスクリプトで実行したいのですが、これはどうやれば出来るのでしょうか? 以下に.bashrcの内容とshスクリプトの内容を記載します。 .bashrcの内容 # .bashrc # source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi alias log='tail -f /var/log/messages' test01.shの内容 #! /bin/bash log 実行すると ./test01.sh: line 2: log: command not found となってしまいます。 ちなみに、shの中ではなく、ログイン後にコマンド(log)だけプロンプトに打つとちゃんとtail -f /var/log/messagesの内容が出力されます。 shの作りが悪いのでしょうか? どなたかご教授いただけますとありがたいです。 osはlinux redhat5.4です。 どうぞよろしくお願いいたします。
回答: $home/.bashrc(.profile)はインタラクティブシェルでしか読み込まれません。 また通常aliasはインタラクティブシェルでしか機能しません。 そういう用途にはfunctionを使います。 なお、bashの場合はexpand_aliasesをセットすればインタラクティブシェル じゃなくてもaliasが展開されます。以下、例です。 a.sh: alias ali='echo "alias!"' fun() { echo "function!"; } b.sh: #!/bin/bash -x # ↓コメントをオンオフして試してみてください #shopt -s expand_aliases . ./a.sh ali fun