スクリプトの絶対パスを環境変数の参照に置き換える sed コマンド
目新しさはありませんが、たまに使いたくなった時に忘れているのでメモを残します。
シェルスクリプトなどで絶対パス(それも結構長い)が多く含まれている場合に、それを環境変数の参照に置き換えたくなることがあります。
まず、環境変数は定義済みという前提です。
置き換えは以下2点を気をつければ sed で手軽にできます。
- 置換パタンはダブルクォート(")で囲む
- \x24 がドルマーク($)を示す
以下は例です。
/home1/hoge/fuga/nagai/mohitotsu/に以下2つのファイルがあります。
data.txt
2016 9 22
2017 9 22
2018 9 22
2019 9 22
2020 9 22
2021 9 22
2022 9 22
weekday1.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
import sys
weekday_jp = ["月","火","水","木","金","土","日"]
for l in sys.stdin:
l = l.rstrip("\r\n")
d = list(map(int,l.split()))
print("{}/{}/{}({})".format(d[0],d[1],d[2],weekday_jp[datetime.datetime(d[0],d[1],d[2]).weekday()]))
これを実行するスクリプトrun0.shです。
run0.sh
cat /home1/hoge/fuga/nagai/mohitotsu/data.txt | python /home1/hoge/fuga/nagai/mohitotsu/weekday1.py
こんな風に実行されます。
$ ./run0.sh
2016/9/22(木)
2017/9/22(金)
2018/9/22(土)
2019/9/22(日)
2020/9/22(火)
2021/9/22(水)
2022/9/22(木)
ここで、ファイルのあるパスをFILEPATHという環境変数に設定します。
その変数に置き換えたスクリプトrun1.shを作ります。
2行目の sed コマンドがこの記事の本題です
export FILEPATH=/home1/hoge/fuga/nagai/mohitotsu
sed -s "s:${FILEPATH}:\x24{FILEPATH}:g" run0.sh > run1.sh
chmod +x ./run1.sh
run1.shの内容です。
run1.sh
cat ${FILEPATH}/data.txt | python ${FILEPATH}/weekday1.py
ちゃんと同じ実行結果が得られます。
$ ./run1.sh
2016/9/22(木)
2017/9/22(金)
2018/9/22(土)
2019/9/22(日)
2020/9/22(火)
2021/9/22(水)
2022/9/22(木)
Author And Source
この問題について(スクリプトの絶対パスを環境変数の参照に置き換える sed コマンド), 我々は、より多くの情報をここで見つけました https://qiita.com/wyamamo/items/e80a83541f3ff26fcaef著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .