これの続き。
書いたshell
環境変数渡したり、なんかもはや pdf ファイルは一定のディレクトリ内に格納されたほうが便利かなと思って下記を書いた。
英語は感覚で書いているのでめちゃくちゃな気がする。
#!/bin/sh if [ $# -eq 0 ] || [ $# -gt 2 ]; then cat << EOS How to use: Single File Mode: ex) ./build_pdf.sh test-slide/slide.md Create pdf file in output dir. For example input, output pdf file name is slide.pdf Optinal mode: ex) ./build_pdf.sh test-slide/slide.md out.pdf Create pdf file in output dir, output file name is out.pdf EOS exit 1 fi OUTPUT_DIRNAME="./output/" if [ ! -e "$OUTPUT_DIRNAME/" ]; then mkdir $OUTPUT_DIRNAME touch "$OUTPUT_DIRNAME/.keep" echo "Create Dir: $OUTPUT_DIRNAME" fi OUTPUT_FILENAME=$2 if [ -z "$OUTPUT_FILENAME" ]; then OUTPUT_FILENAME=${1##*/} OUTPUT_FILENAME=${OUTPUT_FILENAME%.*}.pdf fi CHROME_PATH=$(which google-chrome-stable) pnpx marp "$1" -o "$OUTPUT_DIRNAME$OUTPUT_FILENAME"
run script で解決してみる
ところで npm run の形で環境変数を渡す手段もありそうだ。
とりあえず pakage.json にこんな感じの記載をして、固定して渡す環境変数を定義してしまう。
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "marp": "CHROME_PATH=$(which google-chrome-stable) marp" },
これで pnpm run marp
したら marp が動く( pnpm 試してるので npm じゃないんですが、コマンド体系的に似てて、この動作については一緒なので以後、 pnpm になっていますが、お気になさらず)。
で、引数を雑に渡すと失敗する。
❯ pnpm run marp test-slide/slide.md -o output.pdf ERROR ERROR Unknown option: 'o' For help, run: pnpm help run
下記の記事を参考に、引数の渡し方を変えたらできた。 run script では必須の知識ではないだろうか…。
❯ pnpm run marp test-slide/slide.md -- -o output.pdf > marp-backup@1.0.0 marp /home/yumechi/work/github.com/yumechi/marp-backup > CHROME_PATH=$(which google-chrome-stable) marp "test-slide/slide.md" "-o" "output.pdf" [ INFO ] Converting 1 markdown... [ INFO ] test-slide/slide.md => output.pdf
一応公式のページ
感想
まず npm run する方向性で考えればよかったですねという反省。まあ久々に shell 書いて勉強になったのでよしとしましょう。
shell 、すぐ書き方なり典型的な処理を忘れてしまうんので、今年こそまとめようと思います…。
追記
今書いてるのは private でいろいろやらないといけないものなので見せられないのですが、時間ができたら自分用の slide 公開場としてテンプレートっぽいディレクトリを作ろうと思います。