こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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です。

どうぞよろしくお願いいたします。

投稿日時 - 2011-10-14 23:40:54

QNo.7071986

すぐに回答ほしいです

質問者が選んだベストアンサー

$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

投稿日時 - 2011-10-15 02:05:55

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

bashのマニュアルをよく読んでください。
.profile等のファイルが読みこまれるかどうかの条件がいろいろ書いてあるはずです。

すなおにtest01.sh内にalias書くか、alias使わずにちゃんと書くか、です。

投稿日時 - 2011-10-15 00:04:45

あなたにオススメの質問