4
6

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 5 years have passed since last update.

bash > ディレクトリを移動して、コマンドを実行して、実行前のディレクトリに戻る > サブシェルを使った方法を教えていただきました

Last updated at Posted at 2017-04-03
動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv

背景

以下が異なる。

  • スクリプトディレクトリ
  • データディレクトリ

データディレクトリ(複数)を切り替えながら、スクリプトを実行する。
viでの編集なども検討して、スクリプトディレクトリに常駐したい。

cd -使用 > 要改善

cd [dir]cd -を組合せてみた。

$ pwd
/home/user/WORK/BASH_170403

$ mkdir -pv TOP/MIDDLE/BOTTOM

$ cd TOP/MIDDLE/BOTTOM/; touch bfile; cd -
/home/user/WORK/BASH_170403

$ pwd
/home/user/WORK/BASH_170403

touch bfileには実際のスクリプト実行文が入る。

;で連結していることで、スクリプトが完了した場合でも、停止された場合でも、元のディレクトリに戻るようにしている。

上記のスクリプト実行分(データディレクトリ複数に対して複数ある)を複数用意して、ハッシュタグをつけて実行すれば、複数データディレクトリに対する動作チェックはしやすいように思う。
参考: コマンド実行時にハッシュタグをつけて履歴から検索しやすくしてみる

$ cd TOP/MIDDLE/BOTTOM/; touch bfile; cd - #touchBfile

スクリプト自体に実行対象ディレクトリを指定する引数を用意するのは別案。

教えていただいた項目

@akinomyoga さんのコメントにてサブシェルを使った方法を教えていただきました。

情報感謝です。

追記

cd -の実行方法ではスクリプトの書き方によってはCtrl+Cした時に元のディレクトリに戻らない状況もありました。例として、以下のスクリプトでは戻りませんでした。

sample_exec
# !/usr/bin/env bash

for loop in $(seq 1 10);do
	sleep 0.1
	date
done

サブシェルを使う方法の方が良さそうです。

4
6
5

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
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?