前書き
自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。
本記事では、実行ファイル名の取得方法、実行ファイルの絶対 / 相対PATH取得方法を比較します。比較では、実装例および実行例をそれぞれ示します。
Bashではなく、RubyやPython3を使った方が好ましい理由は、以下の記事に記載しています。この記事には、各プログラミング言語の様々な実装(ディレクトリ操作やファイル操作など)を比較した他記事へのリンクを一覧にまとめています。
各言語のVersion
- Bash:GNU bash, バージョン 5.0.3(1)-release
- Ruby:ruby 2.5.5p157 (2019-03-15 revision 67260)
- Python:Python 3.7.3
[the_ad id=“598”]
比較:実行ファイル名 / 実行ファイルの絶対・相対PATHの取得
実行ファイル名は、Usage(使い方)を表示するために取得する機会が多いです。実行ファイルのPATHは、そのPATH起点でディレクトリ移動やファイル操作する際などに用います。
以下に、各言語の実装方法および実行例を示します。
Bashの場合
#!/bin/bash
# ファイル名(PATHなし)の取得
echo "$(basename $0)"
# 絶対PATHでの取得
# ① 実行スクリプトの存在するPATHを取得(dirname部分)
# ② スクリプトが存在するディレクトリへ移動
# ③ pwdコマンドでスクリプトが存在するディレクトリのPATHを取得
# ④ スクリプト名("/$(basename $0)"部分)を連結
echo "$(cd $(dirname $0) && pwd)/$(basename $0)"
# 相対PATHでの取得
echo "$0"
Rubyの場合
#!/usr/bin/env ruby
# ファイル名(PATHなし)の取得
p(File.basename(__FILE__))
# 絶対PATHでの取得
p(File.expand_path(__FILE__))
# 相対PATHでの取得
p(__FILE__)
Pythonの場合
#!/usr/bin/env python3
import os
# ファイル名(PATHなし)の取得
print(os.path.basename(__file__))
# 絶対PATHでの取得
print(os.path.abspath(__file__))
# 相対PATHでの取得
print(__file__)
Bash、Ruby、Python3の実行例
$ ./bash.sh
bash.sh
/home/nao/scripts/bash.sh
./bash.sh
$ ./ruby.rb
"ruby.rb"
"/home/nao/scripts/ruby.rb"
"./ruby.rb"
$ ./python.py
python.py
/home/nao/scripts/python.py
./python.py
