Nushell job control
Job control
Nushell Ver 0.72の段階ではまだ、Job control
が実装されていません。このためCtrl-Z
が効かない、バックグラウンドジョブが実行できません。Nu本にあるようにNukesor/pueue: Manage your shell commands.と連携してジョブ制御を行えるようにします。
Pueueを使ったジョブ制御
Pueue は、実行時間の長いタスクを順次および並列に実行するためのコマンドラインのタスク管理ツールです。
以下はFAQより。
最もよくある質問の 1 つは、Tmux や Screen などのターミナル マルチプレクサがある場合に、そもそもなぜ Pueue を使用する必要があるのかということです。
私の回答は、これらには多くの便利な機能が欠けているということです。
以下は、Pueue の基本機能の例です。
- コマンドをキューに入れ、一度にすべてを開始しない機能
- 並行して実行するタスクの数を指定する
- タスクの簡単な一時停止/再開
- 見やすくアクセスしやすいタスク ステータスの概要
- 複数の tmux セッションにアタッチする必要はありません
- Install pueue
以下はarm64
アーキテクチャ向けのインストール手順ですが、参考までにインストール方法を示します。
wget https://github.com/Nukesor/pueue/releases/download/v2.1.0/pueued-linux-aarch64
chmod a+x pueued-linux-aarch64
mv pueued-linux-aarch64 $HOME/.cargo/bin/pueued
wget https://github.com/Nukesor/pueue/releases/download/v2.1.0/pueue-linux-aarch64
chmod a+x pueue-linux-aarch64
mv pueue-linux-aarch64 $HOME/.cargo/bin/pueue
wget https://github.com/Nukesor/pueue/releases/download/v2.1.0/systemd.pueued.service
sed -i -e "s#/usr/bin/#$HOME/.cargo/bin/#" pueued.service
mkdir -p $HOME/.config/systemd/user
mv systemd.pueued.service $HOME/.config/systemd/user
systemctl --user start pueued.service #サービス起動
systemctl --user enable pueued.service #サービス自動起動有効
-
Download job.nu
-
cp job.nu $env.NU_LIB_DIRS
-
use job.nu
の行を $nu.config-path に追記
次のコマンドが使えます。
- job spawn [block]
引数のブロックをバックグラウンドジョブとして登録します。 - job kill <id>
指定IDのジョブを削除します。 - job clean
ジョブのログを削除します。 - job status
ジョブの状態を表示します。
❯ job status | get Done.0
Success
- job log <id>
指定IDのジョブ実行時のログを表示します。
応用例
clipnotify
とxsel
を使ったclipboardの内容をテキストに書き溜めるツールです。実行部分はNushellのスクリプトです。
下記を$env.NU_LIB_DIRS
ディレクトリにclip.nu
として保存。$nu.config-path
のNushell設定ファイルにuse clip.nu
を追記します。
# clip.nu
export def capture [] {
loop {
# clipnotifyはクリップポートに変化があると終了する
^clipnotify -s clipboard;
# クリップボード履歴ファイル(clipboard.txt)を開いて、
# xsel コマンドより最新のクリップボード内容を追記して
# 最大100行となるよう保存
open ~/.cache/clipboard.txt
| append (^xsel -bo)
| to text
| ^tail -n 100
| save -r ~/.cache/clipboard.txt
}
}
次の手順で上記をpueue
に登録して実行させます。
- touch ~/.cache/clipboard.txt
- job spawn {clip capture}
- なにかをクリップボードへ
- cat ~/.cache/clipboard.txt
clipnotify
X11のclipboard, primary, secondaryを監視するコマンドです。基本は監視対象に変化があった場合に終了します。-l
オプションでは終了せず、状態変化時に標準出力を出力します。-s
オプションで監視対象を選択します。下記はクリップボードを監視するための設定となります。
clipnotify -s clipboard
- (github)[https://github.com/cdown/clipnotify]よりダウンロードして,
cd clipnotify
make
-
cp clipnotify path/to/
# PATH設定されているフォルダにコピー
xsel
コマンドがない場合、適宜apt install
してください。
Tips
今回xsel
コマンドを使いましたが、オプションを-b
のみでNushellのinteractiveモードで動作することを確認して、pueue
でジョブ投入するとxsel
がSleep状態となり、全体の動作が停止してしまいました。そこでstrace
コマンドでattach
するとread(0,
となっており、標準入力待ちであることがわかり、man xsel
で調べると下記のようになっており、オプションを-bo
に変更して動作するようになりました。
By default, this program outputs the selection without modification if both standard input and standard output are terminals (ttys). Other‐ wise, the current selection is output if standard output is not a ter‐ minal (tty), and the selection is set from standard input if standard input is not a terminal (tty). If any input or output options are given then the program behaves only in the requested mode.
Discussion