お知らせ
現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
シェルスクリプトでオプションパラメーターを解析するやつ
基本shift
と合わせて使う
とりあえず最低限の動作サンプル的なやつ
#!/bin/bash
usage_exit () {
echo "Usage: $0 [-p piyo] [-f] <foo> <bar>"
exit 1
}
# オプション名の後ろに `:` をつけるとパラメーターを取れる、つけないと取れない
# オプション先頭に `:` をつけるとエラーハンドリングを自動でしなくなる
# e.g. `getopts :p:fh`
while getopts p:fh OPT
do
case $OPT in
p) piyo=$OPTARG
;;
f) fuga=1
;;
h) usage_exit
;;
\?) usage_exit
;;
esac
done
# オプション分の引数をずらす
# これがないとオプションが `$1` とかに入ってくる
shift $((OPTIND - 1))
# オプションを抜いた引数を取る
foo=$1
bar=$2
echo $foo
echo $bar
echo $piyo
echo $fuga
pull_request
イベントの公式リファレンスが手薄くイベントの意味を明示してないので動きを実際に確認したものをメモ程度に。基本は意味のままだと思いますが…
opened: PRが開いたとき
reopened: PRが開き直されたとき
synchronize: PRに対してPushが走ったとき
pull_request
はbranches
を先頭に書かないと、指定ブランチ以外でも走るので注意name: testing on opend PR to main
on:
pull_request:
branches:
- main
types:
- opened
- reopened
- synchronize
jobs:
# 事前ブランチチェック
before-check:
runs-on: ubuntu-latest
steps:
- name: fail case
if: startsWith(github.head_ref, 'test/') && github.base_ref == 'main'
# test/* ブランチから main ブランチ宛である場合
# exit 1で終了することで Workflow を failure 扱いにする
# https://docs.github.com/ja/actions/creating-actions/setting-exit-codes-for-actions
run: exit 1
# 前の if に入らなければ、そのまま次のジョブにつながる
after-exec:
# 指定されたジョブの成功を要求、失敗している場合、このジョブを実行しない
# 必然的に線形実行になる(並列では走らない)
needs: [before-check]
runs-on: ubuntu-latest
steps:
- name: TEST!
run: echo "RUN after-exec"
cwd=$(cd $(dirname $0); pwd)
$0
はシェルスクリプトのフルパスdirname
でスラッシュから始まるファイル名を除去cd
で移動pwd
で表示これはサブシェルを使うと出来る
サブシェルとは()
で囲まれた部分で、この中では別のシェルが動いている
例えば次のスクリプトはfoo/
に移動し中のファイルリストを表示するが、2行目では現在の位置にあるファイルリストを表示するため移動していない
コマンド展開記法$()
もサブシェルが動いている
(cd foo/; ls -la)
ls -la
curl; echo 2;
コマンドの末尾に&
をつけるとバックグラウンドで実行される
echo 1 & echo 2
AndAlso的な動きをする
curl && echo 2
コマンドの末尾に|
をつけると標準出力が次にリダイレクトされる
echo 1 | xargs -I{} echo {}2
OrElse的な動きをする
curl || echo 1
HTTPを始めFTPやLDAPなど多様なプロトコルに対応したクライアント
curl [options...] <url>
ヘルプが充実してるのでヘルプ見たほうが早い
-X method
-X POST
とかするとそのメソッドを投げられる-XPOST
形式でも動く-s
-S
-s
が指定されている時にエラーを表示する-L
-sSL
でセットにして使うことが多い-v
--verbose
-I
でも見れるがHEAD methodを投げてるだけなので-X
と併用できない)2>&1
-H
-H 'Content-Type: application/json'
-H 'User-Agent:' -H 'Accept:' -H 'Host:'
でcurl自身の既定ヘッダを消せる。但しHostヘッダーのないリクエストはRFC違反であるため受け付けられる保証はない-d
x-www-form-urlencoded
を投げる時に使う-d key=value
-X POST
扱いになる--data-urlencode
-d
と同じだが中身がURLエンコードされる-o <path>
curl -v -H 'Content-Type: application/json' -d '{ "hoge": "piyo" }' -- 'https://example.com'