我正在写一个shell脚本,以使我的工作流程中的事情自动化,以出版书籍。
我是手动做事的,一般来说,我很懒,可以在自动化之前一次又一次地重复做事,但今天我不得不做一个非常重复的任务,我想把事情做对,所以我就决定写一个脚本来帮助我和未来的我。
所以我写了一个shell脚本,它要进入不同的文件夹,必须调用3次 npx做一些事情,像这样。
#!/bin/sh
cd c-handbook
npx honkit pdf ./ ../books/$(basename $PWD).pdf
npx honkit epub ./ ../books/$(basename $PWD).epub
npx honkit mobi ./ ../books/$(basename $PWD).mobi
cd ..
# and repeat this endlessly
cd css-handbook
npx honkit pdf ./ ../books/$(basename $PWD).pdf
npx honkit epub ./ ../books/$(basename $PWD).epub
npx honkit mobi ./ ../books/$(basename $PWD).mobi
cd ..
npx 所做的部分都是一样的。
所以我把所有的npx 调用包装成一个函数,然后我调用这个函数来代替,像这样。
#!/bin/sh
generate_book () {
npx honkit pdf ./ ../books/$(basename $PWD).pdf
npx honkit epub ./ ../books/$(basename $PWD).epub
npx honkit mobi ./ ../books/$(basename $PWD).mobi
}
cd c-handbook
generate_book
cd ..
cd css-handbook
generate_book
cd ..
# ...and so on
然后当我在那里的时候,我还决定为所有的图书文件夹创建一个数组。
books=( "c-handbook" "css-handbook" "deno-handbook" "es5-to-next" "express-handbook" "html-handbook" "javascript-beginner-handbook" "linux-commands-handbook" "nextjs-handbook" "node-handbook" "python-handbook" "react-beginner-handbook" "svelte-handbook" "vue-handbook" )
并用一个循环来迭代这个数组。
for i in "${books[@]}"
do
:
echo $i
cd $i
generate_book
cd ..
done
最终版本。
#!/bin/sh
books=( "c-handbook" "css-handbook" "deno-handbook" "es5-to-next" "express-handbook" "html-handbook" "javascript-beginner-handbook" "linux-commands-handbook" "nextjs-handbook" "node-handbook" "python-handbook" "react-beginner-handbook" "svelte-handbook" "vue-handbook" )
generate_book () {
npx honkit pdf ./ ../books/$(basename $PWD).pdf
npx honkit epub ./ ../books/$(basename $PWD).epub
npx honkit mobi ./ ../books/$(basename $PWD).mobi
}
for i in "${books[@]}"
do
:
echo $i
cd $i
generate_book
cd ..
done