シェルスクリプト内でディレクトリ階層移動して呼び出し元で反映する方法


シェルスクリプト内でディレクトリ階層移動して呼び出し元で反映する方法

簡単なシェルスクリプト書いたので後世に残しておく。
特にシェルに詳しいわけではないので何か問題あったら気軽に編集リクエストとかコメントください!

やりたいこと

  • 毎日サーバー上で日付いりのフォルダを掘ってそこで作業している人向けのスクリプト 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

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 されずにハマった)ので同じ感じでハマるかたがいないように