Open2

Taskfileで対話的な処理を走らせるときにtaskがinterruptを捕えてしまう問題

hrkohrko

taskにはCtrl-Cを押したときにtaskがinterruptをインターセプトして、3回interruptがあるとタスクを強制終了する仕様がある。それゆえに、例えば、以下の例に示すようなセッションマネージャーでEC2インスタンスに接続するタスクをTaskfileに定義すると、普通にCtrl-Cを使いたくても3回Ctrl-Cを打った時点で接続が強制的に切断されてしまう。

タスクの例
  ssm-hoge:
    silent: true
    interactive: true
    cmds:
      - aws ssm start-session --target i-xxxxxxxxxxxxx
タスクの実行例
$ task ssm-hoge

Starting session with SessionId: xxxxxxxxxxxxxxxxxxxxxxxx

[ec2-user@hoge ~]$ task: Signal received: "interrupt"
^C
[ec2-user@hoge ~]$ task: Signal received: "interrupt"
^C
[ec2-user@hoge ~]$ task: Signal received for the third time: "interrupt". Forcing shutdown
^C
[ec2-user@hoge ~]$  $ 
hrkohrko

解決策として、bash -i -c "<コマンド>"とすると良い。

対策版のタスク
  ssm-hoge:
    silent: true
    interactive: true
    cmds:
      - bash -i -c "aws ssm start-session --target i-xxxxxxxxxxxxx"