シェルで前にいたディレクトリに戻る

ブログ

こんにちは、山田ハヤオです。以前 緊急でこんな記事を出しました。ごめんなさい。

さて、Linuxerの方ならほぼ必ずターミナルを使うと思います。

ターミナルを使う上で必ずといってもいいほど使うコマンドがcdコマンドです。

「cd」って「current directory」かと思ったら「change directory」なんですね

cdコマンドを使ってると間違って違うディレクトリに移動してしまうことがたまにあります。

そんなときの簡単な対処方法とシェルスクリプトでの応用方法です。

スポンサーリンク

前のディレクトリに戻る

cd -

これだけです()そうすると前にいたディレクトリ名が表示されて戻ることができます。

ターミナルで自分で作業するだけならこれで十分ですね

シェルスクリプトで使うには

シェルスクリプトでも上と同じように戻ることができます。

しかし、前にいたディレクトリのパスが表示されてしまうので、その表示を破棄します。

cd - > /dev/null

一気に面倒になりました()

シェルスクリプトで簡単に使うには

実は前にいたディレクトリのパスというのはOLDPWDという変数に格納されています。

現在いるパスはPWD変数か、pwdコマンドで確認することができます。

realpathは指定したパスのフルパスを表示するコマンド ./で現在の場所を相対的に指定することでフルパスを表示する。

この環境変数を利用しましょう。

cd "${OLDPWD}"

シェルスクリプトではこっちを利用したほうがきれいです。

シェルスクリプトでcdコマンドを多用したくない

シェルスクリプトでcdコマンドを利用すると、自分が今どこにいるのかを常に意識して書かないといけません。(移植性も下がってしまいますし行数も増えてしまいます。)

そんなときは別のプロセスでディレクトリを移動して処理をすると一時的に移動することができます。

()の中にコマンドを記述すると別で処理をしてくれます。

#!/usr/bin/env bash

echo "ホームディレクトリに移動"
cd "${HOME}"
printf "現在のディレクトリ: %s\n" "$(pwd)"
(
    echo "別のプロセスでcdを実行"
    cd "/usr"
    printf "現在のディレクトリ: %s\n" "$(pwd)"
)
echo "元に戻ってくる"
printf "現在のディレクトリ: %s\n" "$(pwd)"

()内でディレクトリの移動を行っても影響されないことが解ると思います。

この手法はAlter Linuxのソースコードでもちょこちょこ出てきます()

Alter Linuxのソースコード↓

FascodeNet/alterlinux
Alter Linux - ArchLinux-derived OS made in Japan aimed at being usable by anyone - FascodeNet/alterlinux

最後に

間違ってる部分があったらコメントで教えてください。正直自分でも不安です。

コメント

タイトルとURLをコピーしました