シェルスクリプト内でディレクトリ階層移動して呼び出し元で反映する方法
簡単なシェルスクリプト書いたので後世に残しておく。
特にシェルに詳しいわけではないので何か問題あったら気軽に編集リクエストとかコメントください!
やりたいこと
- 毎日サーバー上で日付いりのフォルダを掘ってそこで作業している人向けのスクリプト
mkdir 190512 && cd 190512
- 現シェルのコンテキストで別シェルを呼び出す
source ~/start.sh
データ
~/ops/startTodaysOps.sh
#!/bin/bash
dir1='ops/'
dir2=`date "+%y%m%d"`
dir=$dir1$dir2
if [[ ! -e $dir ]]; then
mkdir $dir
chmod g+w $dir
fi
echo $dir
cd $dir
~/.bashrc
.bashrc
alias start='source ~/ops/startTodaysOps.sh'
実行する
hirao $ start
ops/200512
hirao $ ~/ops/200512$
ちょっとだけ解説
# 存在確認
if [[ ! -e $dir ]]; then
fi
# -p オプションで存在確認してもよし
mkdir $dir
# とりあえずグループに書き込み権限あたえる
chmod g+w $dir
cd $dir
# このCDは source で呼び出さないと別シェルでディレクトリ移動するっぽい
実行シェルのプロセスIDを書き出す
test.sh
#!/bin/bash
echo $$
~/workspace/shell-sample hirao$ echo $$
42143
~/workspace/shell-sample hirao$ ./test1.sh
42366
~/workspace/shell-sample hirao$ source ./test1.sh
42143
こんな感じ。sourceで実行すればもとのシェル内での移動になるので実行後に移動されています。
終わりに
結構雑に書きましたが、スクリプト書くのには時間かかった( cd
されずにハマった)ので同じ感じでハマるかたがいないように