• ベストアンサー
  • すぐに回答を!

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です。 どうぞよろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数1403
  • ありがとう数0

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

  • ベストアンサー
  • 回答No.2

$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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • /etc/bashrc について

    CentOSを使っています。 /etc/bashrcは、シェルが立ち上がったときに読み込まれるもの、という認識なのですが、もしこの中にメールを送信するコマンドを書いておけば、サーバにログインされた時のアラートメールの設定をしたことになるでしょうか?

  • UNIX/Linuxの「エイリアス置換」について

    UNIX/Linuxの「エイリアス置換」のところで教えてください。 書籍に次のような記述がありました。 (なお、¥は「バックスラシュ」の意味です。) エイリアス置換をエスケープするには、コマンドの前に「¥」をつけます。たとえば、このようにrmが「rm -i」にエイリアスされている場合に、エイリアスされたrmではなく、本来のrmを実行したいならば、次のようにrmの前に「¥」をつけます。 % \rm test.txt エイリアス置換はそれ以上エイリアス置換ができなくなるまで繰り替えします。そのため、エイリアスの定義によってはエイリアス置換が止まらなくなることもあります。これを防ぐには、エイリアス置換の必要のないコマンドはエイリアス置換をエスケープしておくといいでしょう。 % alias rm  \\rm -i % alias rm (\rm -i) 【質問1】この2つめの段落の「エイリアス置換が止まらなくなることもあります」とはどのような事を指しているのでしょうか。 【質問2】このrmは「エイリアス置換をエスケープ」しているはずなのですが、試してみると、-iコマンドが生きていました。つまり、 alias rm   \\rm  -i と、 alias rm   rm  -i は同じ動きでした。何がいけないのでしょうか。

  • cronの挙動について

    cronの挙動について教えてください。 現在user「AAA」のcronにシェルスクリプトを登録しています。 コンソールから登録してあるスクリプトが正常に起動できることは確認できております。 しかしcron経由でコマンドが実行できない状態(/var/log/cronにコマンドを実行した履歴は残っています)でした。 色々試したところ、スクリプトの先頭で.bashrc(user「AAA」のもの)をsourceコマンドで実行するようにしたところ、cronからも起動できるようになりました。 (.bashrcには、スクリプト実行に必要な環境変数やパスの設定がされています) そこで質問なのですが、 (1) cronでコマンドを実行する場合、.bashrcは明示的に実行しなければいけないのでしょうか。 cronで実行される場合、ログインした状態と同じ環境で実行されるとばかり思っていたため、見落としていたのですが・・・。 以上、よろしくお願いいたします。

その他の回答 (1)

  • 回答No.1
  • kmee
  • ベストアンサー率55% (1857/3366)

bashのマニュアルをよく読んでください。 .profile等のファイルが読みこまれるかどうかの条件がいろいろ書いてあるはずです。 すなおにtest01.sh内にalias書くか、alias使わずにちゃんと書くか、です。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • Linuxの起動時のメッセージ

    Linux起動時にデーモン起動からログインを促す状態までに表示されるメッセージの中で赤字でFAILERとなっている箇所が2つありました。 あまりに早くて何がFAILERなのかわかりませんでした。 コマンド(dmesg)、あるいは、/var/log/messagesの中身で確認できるということが分かりましたが、これらで表示されるテキストの中には、OKやFAILERは書いてありません。 もう一度起動時のメッセージを確認し、 FAILER付近に"premission deneid"と書かれていたので、 それを上記コマンドやファイルで確認しましたがそれもありませんでした。 本当に起動時のメッセージはdmesgや/var/log/messagesに書かれているのでしょうか。 もうデジカメで写真取るしかないか、という発想になってしまうのですが、何かアイディアをお持ちの方はいらっしゃいますでしょうか。 よろしくお願いします。

  • cygwinシェルスクリプト内でのエイリアス

    cygwinのterminal上で alias abc=ls abc とやるとlsを実行したことになるのですが、 内容が #!/bin/bash alias abc=ls abc のa.shというシェルを作り実行すると、 ./a.sh: line 3: abc: コマンドが見つかりません というエラーが出て実行してくれません。 解決策が分かる方よろしくお願いします。

  • OS停止・リブート時のrcスクリプト

    いつも参考にしています。 OS停止・リブート時のrcスクリプトについてご教示下さい。 あるアプリの実行シェルを/usr/local/aaaa/start.shに配置し、 /etc/rc3.d/と/etc/rc5.d/配下で下記コマンドを実施し、リンクを張りました。 ln -s /usr/local/aaaa/start.sh S80aaaa この設定でOS起動時にaaaaのアプリを起動する事は出来ました。 また、/etc/rc6.d/と/etc/rc0.d/配下で下記コマンドを実施したのですが、OS起動時に停止していないように見えます。 (/var/log/messagesを見ても停止する様子が確認できません。手動でシェルを実行した場合は/var/log/messagesにログが残ります) ln -s /usr/local/aaaa/stop.sh K10aaaa ここでのstart.sh/stop.shは単純にアプリの起動コマンド・停止コマンドを書いてあるだけのものです。 /etc/rc6.d/K10aaaaaを直接手動で実行すればアプリの停止は可能です。 同じように設定しているのになぜ停止のほうだけうまく動かないのかが分かりません。何かアドバイスがあればお願いします。

  • linuxのログってunixのログと格納場所がちがうのですか?

    linuxについて全く知識がないのでどなたか教えていただけると幸いです solarisではログはvar/adm、var/logなんかにログが吐き出されていくと思います。 それがlinuxではvar/logというディレクトリしかなくて、全てそこに吐き出されると聞きました var/adm/syslogやvar/adm/messagesやvar/adm/sulogなんかも全てvar/log配下に入ってしまうんでしょうか? 宜しくお願い致します

  • Linuxのシェル(sh,bash等)について

    Linux上でコマンドを実行するとき、その窓口となるものが、シェル(sh,bash)という認識です。 つまり、 (1)CUI環境でLinuxを操作する上で、シェル以外でコマンドを実行する事はありうるのか? (2)Windowsのコマンドプロンプトも一種のシェルと言えるか 以上、2点についてお教え頂きたいです。 宜しくお願いします。

  • sudoのDefaultsrequirett設定

    レンタルサーバを借りております。 sshでwindowsサーバから、レンタルサーバに 「 sh connect.sh "tail /var/log/messages"」 を実行して、messagesを見ようとしています。 tailの部分は、シェルスクリプトで 「ssh ユーザ@レンタルサーバ sudo $1」 で利用されるようしております。 このとき、 「sudo: sudo を実行するには tty がなければいけません。すみません」 と表示されます。 対応方法として、 「Defaults !requiretty」 をすれば良い事がわかったのですが、 レンタルサーバのような公開場所で、 することはセキュリティ的にどうなのでしょうか? 公開鍵認証でsshは接続(シェルコマンドは鍵認証コマンドを書いております)しているのですが、 設定を「Defaults !requiretty」にしても問題ないものでしょうか? (※当然セキュリティが下がることは認識しております) 「運用の簡易化」と「セキュリティ」のどちらを取るべきか検討しております。 「 !requiretty」で運用しているよ。 といった意見がありましたら、ご教授いただけると助かります。 よろしくお願いします。

  • bashのaliasに引数を渡すには?

    sshでログインしたubuntuサーバー上で時間のかかるシェルスクリプト(例えば hoge.sh) を実行した後、sshから抜けてもプロセスを走り続けさせるためにnohupを使っています。 nohup hoge.sh > out.log 2> err.log < /dev/null & これはタイプ量が多いし、時間のかかるシェルスクリプトはhoge.shだけではないので、実行したいシェルスクリプトの名前の部分を引数にした下記のようなエイリアスを作りたいのですが、bashのaliasには引数が渡せないとの事です。 alias run='nohup $1 > out.log 2> err.log < /dev/null &' "alias 引数"で検索すると「関数を使うと良い」というページがいくつか見つかりますが、関数ではsshから抜けると終了してしまいます。どうするのが良いでしょうか?

  • /var/log/maillogへのログの書き込み方法の設定に関して

    /var/log/maillogへのログの書き込み方法の設定に関して 誠に恐れ入りますが、どなたかご教示願います。 メール送信用スクリプト実行時のメール送信処理を監視したいと考えています。 Solarisでは以下で「※メール送信処理」記載の送信履歴の取得が問題なくできました。 (1つのスクリプトファイル内での処理です) tail -1f /var/log/syslog > ${監視用ログファイル} & ※メール送信処理 kill ※tailのプロセス しかしながら、Linuxでは、同様の設定(syslog->maillog)を行っても どうも送信履歴の取得が行えません。 現状システム上で起こっている事象を確認した限り、スクリプト完了後に maillogへの書き込みを行っているようで、何とかスクリプト実行中に 同時にmaillogにも書き込み、その結果をログに出力したいと 考えていますが、どのような設定、またはLinux向けのスクリプト修正を行えば それが実現できますでしょうか?

  • rsyncの実行時間

    rsyncを実行後、ログに実行時間を残したいのですが、どのようにコマンドを打てば良いか教えてもらえないでしょうか。 time rsync -avz /usr/src /test >> /var/log/rsync/rsync.log 試しに上記のように打ってみたのですが、実行時間がログには入りませんでした。 Linux初心者ですが、宜しくお願いします。

  • Linux間のリモートシェルの実行について

    マシンタイプ:x225 カーネル: 2.4.20-28.7smp OS:Red Hat Linux 7.3 2.96-126)) 上記のLinuxサーバからrshで同じタイプのリモートのLinuxサーバのシェルを起動しようとしましたが正常に起動されません。 状況としては rsh実行時は特にエラーメッセージが出ることもなく、正常に実行されたかのように終了してしまうため、何が悪いのかもわからない状態です。 実行したコマンドとリモート側のシェルの内容は以下の通りです。 rsh server1 /home/test/testrsh.sh <testrsh.sh> #!/bin/ksh time=`date` echo "rsh test $time" >> /home/test/testrsh.log ちなみに rsh server1 date や rsh server1 uname 等のLinuxのコマンドは正常に実行できます。 どこを確認したらよいでしょうか? よろしくお願いします。