1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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

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

やりたいこと

  • 毎日サーバー上で日付いりのフォルダを掘ってそこで作業している人向けのスクリプト 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 されずにハマった)ので同じ感じでハマるかたがいないように :pray:

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?