3行でまとめると
- Bashのシェルスクリプトを実装した。
- ~/.bashrcに定義しておいた環境変数をシェルの中で使おうとしても存在していない。
- なるほど、~/.bashrcに
export
がいるのか!!
背景
こんなコードをつくった。
$work_root
が~/.bashrcに記述してある環境変数。
main.sh
#!/bin/sh
work_dir=${work_root}/yyy/ddd/mmm/work;
cp -r $HOME/work/* ${work_root};
動かした結果
cp: cannot create regular file `/yyy/ddd/mmm/work': No such file or directory
$work_root
の部分がない・・・だと・・・
ちなみに対話型シェルでは
echo $work_root
で
/home/xxx/hoge
と出てくる。
改善点
.bashrc
の中身の部分の記述がよろしくなかったようです。
~/.bashrc(改善前)
work_root=/home/xxx/hoge
これを、こうする。
~/.bashrc(改善後)
work_root=/home/xxx/hoge;
export work_root;
これでシェルスクリプト内で$work_root
が使えるようになる。
まとめ
- 対話型シェルを使うときは
export
なしでも環境変数が使える。 - シェルスクリプトでは
export
が必要。