LoginSignup
8

More than 5 years have passed since last update.

シェルスクリプトでbashrcが読み込めない

Posted at

cronからシェルスクリプトを起動するのに、bashrcのPATHの設定を使いたくて、

source ~/.bashrc

と書いたのに、設定が読み込まれない。
なぜかと首をひねっていたら、bashrcの冒頭に以下の記述がありました。

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

man bashによると、

対話的なシェルとは、 オプションでない引き数がなく、 標準入力と標準エラー出力がいずれも端末に接続されていて (これは isatty(3) で調べられます)、 -c オプションが指定されていない状態で起動されたシェル、または -i オプション付きで起動されたシェルのことです。 bash が対話的に動作している場合には、 PS1 が設定され、 $- に i が含まれます。 これを利用すると、対話的動作の状態であるかどうかを、 シェルスクリプトや起動ファイルの内部で調べられます。

つまり、シェルスクリプトからsource ~/.bashrcとしても、対話的シェルではないので$-iが含まれず、returnしてしまうわけです。
Ubuntu14.04のデフォルトの.bashrcをそのまま使ってたので気づきませんでした……

.bash_profileはshebangを#!/bin/bash -lとすれば自動で読み込まれるので、PATHはそちらに書いたほうが良さそうです

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8