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

はじめに

Script内にScriptから見たフォルダやScriptの相対パスを定義したのに、正しく実行されない。。。
Scriptを呼び出す際、Scriptを呼び出す場所に関わらず内部で子Scriptを呼び出したい場合はどうすればいい?
という疑問を解消する為の処理について、紹介します。

対象ユースケース:

  • Scriptを呼び出すカレントディレクトリに関わらない結果を担保する
  • 親Scriptに子Scriptの相対パスを定義し、実行する
  • Script内に相対パスを定義したフォルダに対して操作する

環境

Windows/Linuxの端末

Script内の記述

Windows の場合

Windows では Get-Location というモジュールがあります。
これは、現在のディレクトリを表すオブジェクトを取得します。
結果をアーカイブしておき、Set-Location というモジュールでScriptが配置されているディレクトリへ移動します。

# 現在のディレクトリの位置を記録
$LOCATION_ORG = Get-Location
# スクリプトの位置に移動
$SCRIPT_DIR = $PSScriptRoot
Set-Location $SCRIPT_DIR

このままScriptを終えると、Set-Location で移動した位置が最終的な作業ディレクトリとなってしまいます。
そこで、Get-Location で取得しておいた実行前の位置に戻る処理を実行します。

# PowerShell Script実行前の位置にディレクトリ移動
Set-Location $LOCATION_ORG

Linux の場合

Linuxの場合は簡素で、Script内で実行するパスに移動してもScript実行後はカレントディレクトリに変わりはありせん。

cd `dirname $0`

終わりに

スクリプトを呼ぶスクリプトを書くときにハマるところかな、と思います。
ご参考になれば幸いです。

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