Bash スクリプトのディレクトリ取得について
Bash スクリプトを使用する場合、多くの場合、スクリプトが配置されているディレクトリを把握しておく必要があります。これは、作業ディレクトリの設定や、スクリプトの場所に相対的なファイルへのアクセスなど、さまざまなタスクに役立ちます。
このガイドでは、Bash スクリプトのディレクトリ パスをスクリプト自体内から取得する方法を説明します。このアプローチは、スクリプトを他のアプリケーションのランチャーとして機能させ、スクリプトが正しいファイル上で動作するようにする場合に特に便利です。
指示 | 説明 |
---|---|
readlink -f | シンボリック リンクのフル パスを解決し、Bash スクリプトの絶対パスを提供します。 |
dirname | 指定されたファイル パスからディレクトリ パスを抽出します。これは、スクリプトのディレクトリを決定するために使用されます。 |
os.path.realpath(__file__) | Python のシンボリック リンクを解決して、指定されたファイルの正規パスを返します。 |
os.chdir() | 現在の作業ディレクトリを Python で指定されたパスに変更します。 |
abs_path($0) | Perl で実行されるスクリプトの絶対パスを提供します。 |
chdir() | Perl および PHP で現在の作業ディレクトリを指定されたパスに変更します。 |
system() | Perl のスクリプト内から外部コマンドを実行します。 |
exec() | PHP のスクリプト内から外部プログラムを実行し、現在のプロセスを置き換えます。 |
スクリプトの詳細説明
提供されるスクリプトは、スクリプトが配置されているディレクトリを特定し、作業ディレクトリをそのパスに変更するように設計されています。これは、スクリプトが独自のディレクトリ内のファイルを操作する必要がある場合や、その場所から他のアプリケーションを起動する必要がある場合に便利です。たとえば、Bash スクリプトでは、次のコマンドが使用されます。 readlink -f スクリプトの絶対パスを取得するために使用されます。 dirname そのパスからディレクトリを抽出します。そうして cd コマンドは現在の作業ディレクトリをスクリプトのディレクトリに変更し、後続のコマンドが正しい場所で動作するようにします。
Python の例では、 os.path.realpath(__file__) スクリプトの絶対パスを取得し、 os.chdir() 作業ディレクトリを変更します。 Perl スクリプトが使用するのは、 abs_path($0) スクリプトの絶対パスを取得し、 chdir() ディレクトリを変更します。同様に、PHP スクリプトは次のように使用します。 realpath(__FILE__) スクリプトのパスを見つけて、 chdir() ディレクトリを変更します。各スクリプトはアプリケーションを起動するコマンドで終わり、アプリケーションがスクリプトのディレクトリのコンテキストで確実に実行されるようにします。
Bash スクリプトのディレクトリの決定
Bash スクリプトの例
#!/bin/bash
# Get the directory of the script
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
echo "The script is located in: $SCRIPT_DIR"
# Change to the script's directory
cd "$SCRIPT_DIR" || exit
# Execute the application
./application
スクリプト ディレクトリ取得のための Python の代替手段
Python スクリプトの例
#!/usr/bin/env python3
import os
import sys
# Get the directory of the script
script_dir = os.path.dirname(os.path.realpath(__file__))
print(f"The script is located in: {script_dir}")
# Change to the script's directory
os.chdir(script_dir)
# Execute the application
os.system('./application')
スクリプトディレクトリを決定するための Perl スクリプト
Perl スクリプトの例
#!/usr/bin/env perl
use Cwd 'abs_path';
use File::Basename;
# Get the directory of the script
$script_dir = dirname(abs_path($0));
print "The script is located in: $script_dir\n";
# Change to the script's directory
chdir $script_dir or die "Cannot change directory: $!";
# Execute the application
system('./application');
ディレクトリを見つけるための PHP スクリプト
PHP スクリプトの例
<?php
# Get the directory of the script
$script_dir = dirname(realpath(__FILE__));
echo "The script is located in: $script_dir\n";
# Change to the script's directory
chdir($script_dir);
# Execute the application
exec('./application');
?>
スクリプトディレクトリを決定するための代替方法
前に説明した方法以外にも、Bash スクリプトのディレクトリを決定する手法は他にもあります。そのような方法の 1 つは、環境変数を使用することです。たとえば、 $BASH_SOURCE 変数には Bash スクリプトのファイル パスが含まれます。これは、他のスクリプトをソースとするスクリプトに役立ちます。もう 1 つのアプローチは、コマンドライン引数を利用することです。を分析することで、 $0 パラメータには、実行されるスクリプトの名前が含まれており、シンボリック リンクやソース ファイルなどのさまざまなコンテキストから実行されるスクリプトの場所を特定できます。
これらの代替方法は、スクリプトが使用されるコンテキストに応じて柔軟性を提供できます。たとえば、シンボリックリンクを扱う場合、 readlink 多くの場合、スクリプトの実際のパスを解決するために必要になります。これらのさまざまな手法を理解すると、スクリプトが堅牢でさまざまな実行環境に適応できるようになり、ユーティリティと信頼性が向上します。
よくある質問
- を使用してスクリプトのディレクトリを取得するにはどうすればよいですか $BASH_SOURCE?
- 使用できます dirname "$(realpath "${BASH_SOURCE[0]}")" スクリプトのディレクトリを取得します。
- 違いは何ですか $0 そして $BASH_SOURCE?
- $0 は実行されるスクリプトの名前です。 $BASH_SOURCE ソースされたスクリプトのフルパスが含まれます。
- 使ってもいいですか readlink シンボリックリンクで?
- はい、 readlink -f シンボリックリンクのフルパスを解決します。
- どういうことですか os.chdir() Pythonでやりますか?
- os.chdir() 現在の作業ディレクトリを指定されたパスに変更します。
- Perl でスクリプトの絶対パスを取得するにはどうすればよいですか?
- 使用する abs_path($0) Cwd モジュールからスクリプトの絶対パスを提供します。
- PHP で外部プログラムを実行するために使用されるコマンドは何ですか?
- exec() PHP で外部プログラムを実行するために使用されます。
- PHP でディレクトリを変更するにはどうすればよいですか?
- chdir() PHP の現在の作業ディレクトリを変更するために使用されます。
- なぜですか dirname スクリプトで役に立ちますか?
- dirname 指定されたファイル パスからディレクトリ パスを抽出し、スクリプトのディレクトリを見つけるのに役立ちます。
スクリプト ディレクトリの取得に関する最終的な考え方
Bash スクリプトのディレクトリを決定することは、ローカル ファイルを操作したりアプリケーションを起動したりする必要があるスクリプトにとって重要なタスクです。次のようなコマンドを使用することで、 readlink、 dirname、環境変数を利用して、スクリプトは作業ディレクトリを動的に調整できます。これにより、スクリプトがどこから実行されたかに関係なく、スクリプトが正しく動作することが保証されます。これらの方法を理解して実装すると、スクリプトの柔軟性と信頼性が向上し、さまざまなアプリケーションやユースケースでスクリプトの効率が向上します。