LoginSignup
0
0

dockerで機械学習(103) 環境構築(3)docker/linux/macos bash スクリプト, ms-dos batchファイル

Last updated at Posted at 2018-10-06

docker

dockerでシェルスクリプトを作るには、何かエディタがあるとよい。

エディタ

# apt install vim

編集

# vi py.sh

拡張子はsh(shell script)

実行権

# chmod +x py.sh

+x で実行権(eXecute)を付与する。

実行

./py.sh ch01

./をつけて、現在のディレクトリのファイルであることを指定。

例題

py.sh
#!/bin/bash
cd $1
for f in *.py 
  do 
    python $f.py
  done
cd ..

というファイルを作成

# ./py.sh ch01
(null): can't open file 'analyze_webstats.py.py': [Errno 2] No such file or directory
(null): can't open file 'gen_webstats.py.py': [Errno 2] No such file or directory
(null): can't open file 'performance_test.py.py': [Errno 2] No such file or directory

# ls ch01
analyze_webstats.py  data  gen_webstats.py  performance_test.py

おお、実行時の.pyが余分だった。

py.sh
#!/bin/bash
cd $1
for f in *.py
  do 
    python $f
  done
cd ..

実行しなおし。

(base) root@fc6d6bfbba64:/BuildingMachineLearningSystemsWithPython# ./py.sh ch01
Traceback (most recent call last):
  File "analyze_webstats.py", line 10, in <module>
    import matplotlib.pyplot as plt
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/pyplot.py", line 115, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/__init__.py", line 62, in pylab_setup
    [backend_name], 0)
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/backend_qt5agg.py", line 15, in <module>
    from .backend_qt5 import (
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/backend_qt5.py", line 19, in <module>
    import matplotlib.backends.qt_editor.figureoptions as figureoptions
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/qt_editor/figureoptions.py", line 20, in <module>
    import matplotlib.backends.qt_editor.formlayout as formlayout
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/qt_editor/formlayout.py", line 54, in <module>
    from matplotlib.backends.qt_compat import QtGui, QtWidgets, QtCore
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/qt_compat.py", line 158, in <module>
    raise ImportError("Failed to import any qt binding")
ImportError: Failed to import any qt binding
Traceback (most recent call last):
  File "gen_webstats.py", line 14, in <module>
    import matplotlib.pyplot as plt
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/pyplot.py", line 115, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/__init__.py", line 62, in pylab_setup
    [backend_name], 0)
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/backend_qt5agg.py", line 15, in <module>
    from .backend_qt5 import (
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/backend_qt5.py", line 19, in <module>
    import matplotlib.backends.qt_editor.figureoptions as figureoptions
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/qt_editor/figureoptions.py", line 20, in <module>
    import matplotlib.backends.qt_editor.formlayout as formlayout
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/qt_editor/formlayout.py", line 54, in <module>
    from matplotlib.backends.qt_compat import QtGui, QtWidgets, QtCore
  File "/opt/conda/lib/python3.7/site-packages/matplotlib/backends/qt_compat.py", line 158, in <module>
    raise ImportError("Failed to import any qt binding")
ImportError: Failed to import any qt binding
Traceback (most recent call last):
  File "performance_test.py", line 12, in <module>
    number=10000)
  File "/opt/conda/lib/python3.7/timeit.py", line 232, in timeit
    return Timer(stmt, setup, timer, globals).timeit(number)
  File "/opt/conda/lib/python3.7/timeit.py", line 176, in timeit
    timing = self.inner(it, self.timer)
  File "<timeit-src>", line 6, in inner
NameError: name 'xrange' is not defined

し、し、しまった。python 2.7じゃないとダメだった。

参考資料(reference)

docker 入門
https://qiita.com/kaizen_nagoya/items/2f31319e40ddaa0bf8a5

shell でディレクトリ内のファイルに対してループ処理
https://qiita.com/elzup/items/e839a8c4e815808fb4bc

bashの変数展開によるファイル名や拡張子の取得
https://qiita.com/mriho/items/b30b3a33e8d2e25e94a8

パス文字列からファイル名などを抜き出す
https://qiita.com/ktr_type23/items/94747a4b27e8a630ce48

初心者向けシェルスクリプトの基本コマンドの紹介
https://qiita.com/zayarwinttun/items/0dae4cb66d8f4bd2a337

シェルスクリプトの基礎知識まとめ
https://qiita.com/katsukii/items/383b241209fe96eae6e7

プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話
https://qiita.com/piroor/items/77233173707a0baa6360

文書履歴

ver. 0.10 初稿 20181006
ver. 0.11 番号変更、参考文献追記 20181028

最後までおよみいただきありがとうございました。

いいね 💚、フォローをお願いします。

Thank you very much for reading to the last sentence.

Please press the like icon 💚 and follow me for your happy life.

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