LoginSignup
17
15

More than 1 year has passed since last update.

シェルコマンドで「あれもこれもそれも」とやりたい時・やらせた後の確認の仕方

Posted at

「SSHで入ったサーバーに『ウィンドウマネージャ』や『デスクトップ環境』が入っている事は大変稀」
と思う。

そのサーバーやコマンドでの操作で、
「実行後に出力が出るまで時間の掛るコマンド」
を叩いた後で、
「あー、コマンド入力で操作するコンピューターって、 シングルタスク じゃん。LinuxやFree(もしくはOpen)BSD、果てはUNIXが マルチタスク って言ってるのは誇張じゃねえのか?」
と思う方がもしかしたら居るかもしれないという杞憂で書き初めた。

ちょっと読み易い様に逆引きを意識して章立てをしてみたりする程には、筆者はこれらのコマンドを忘れがちである。

本題の前に

あくまで筆者はワンライン否推奨派である。むしろコンピューターとチャットをする様にコマンドは叩きたい。

しかし横着する方向を誤る性分なので、以降には
alias を指定したら良いのに」
「実行したら出力が醜い(見難い)」
と思われるネタ技が散見されるであろう事はご容赦頂きたい。

また、筆者は主に fish たまに bash を使う程度のニワカで、zsheshell はチットモデキナイ。申し訳無いが zsh, eshellの方々は man を読んだ方が確実に有益である。 fish, bash をお使いの方々で、
man や 『Language Syntax』、『言語仕様』の説明書きやドキュメントくらい読めらぁっ!!」
という方も確実に man を読んだ方が有益である。

「あれもこれもそれも」編

「あれ」「これ」「それ」を一度に叩きたい時の小ネタ

「あれ」「これ」「それ」を逐一やらせたい

; を使ってコマンドを繋げるとできる。実例;

$ sudo apt update; sudo apt full-upgrade -y; sudo snap refresh; flatpak update -y; .emacs.d/bin/doom upgrade

Debian系列やUbuntuではお馴染みの apt パッケージマネージャーでパッケージ情報の、ついでに snapflatpak といった「ユニバーサルパッケージシステム」のパッケージマネージャーもアップグレードをしてる。

ただし次に記す方法で並行して実行すると出力がとてつもなく見辛くなる。

また、最後にEmacsディストリビューションの『DOOM Emacs』のアップグレードを対話(確認)してもらいながら行う。

「あれ」「これ」「それ」を一気にやらせたい

& を使ってコマンドを繋げるとできる。実例;

$ sudo apt update & sudo apt full-upgrade -y & sudo snap refresh & flatpak update -y

apt パッケージマネージャーでパッケージ情報の、ついでに snapflatpak といった「ユニバーサルパッケージシステム」のパッケージマネージャーでもアップグレードをしてる。

ただし出力がとてつもなく見辛い。

「あれ」が正常終了したら「これ」をやる

何番煎じのネタだが、実例;

$ sudo apt update && sudo apt full-upgrade

口説いが apt コマンドである。

「パッケージリスト更新(update)が正常にできたら、更新可能パッケージの更新(full-upgrade)」
full-upgrade にあえて -y を付けないで、更新するパッケージの確認をしてから続行するか否かを選択する事もある。

蛇足

||; 同等の事も可能。

数理論理学・集合論、もしくは「足し算(加算)と掛け算(乗算)の入り混った計算も暗算できる」方なら気付かれたかもしれないが、 && の前に実行されたコマンドが正常終了しなかった場合には、&& 以降のコマンドは実行されない。

今までの応用実例

と言っても大した事はしていない上に、多少引っ掛けがある。

$ sudo apt update && sudo apt full-upgrade -y; sudo snap refresh & flatpak update -y & .emacs.d/bin/doom upgrade

apt が管理しているパッケージには、以降に続く snapflatpak, emacs そのものも含まれているため、一旦この様に実行する。

「あれやこれやそれ、どうなった?」編

以下も該当するかもしれない:

  • vivim で編集中に手癖でCtrl+zを押してしまったりして、シェルに移った時の確認
  • コマンドを実行したものの、応答が無さすぎてコマンド入力もできない時

一括(もしくは末尾に & を付けたコマンド)が動いてるかの確認

jobs で確認。実例;

$ jobs
Job Group   CPU State   Command
3   35267   0%  stopped sudo apt full-upgrade -y
1   34097   0%  stopped flatpak update -y &

動かしたコマンドの確認に答える・入る

fg %[1-n] で一つだけ入力できる様になる。実例;

$ jobs
Job Group   CPU State   Command
3   35267   0%  stopped sudo apt full-upgrade -y
1   34097   0%  stopped flatpak update -y &

$ fg %1
-- # flatpak update -y の進捗が表示される --
-- # 場合によっては[y/N]みたいな事に答えれる --

vi, vim も同様の方法で編集しなおせる。

動かしたコマンドが stopped だが再開させる。

bg %[1-n] で再開させる事ができる。実例;

$ jobs
Job Group   CPU State   Command
3   35267   0%  stopped sudo apt full-upgrade -y
1   34097   0%  stopped flatpak update -y &

$ bg %3
-- # flatpak update -y の進捗が表示される --
-- # 場合によっては[y/N]みたいな事に答えれる --

蛇足

fg, bg; で繋げる事が可能なので;

$ fg %1; bg %2 %3 %4

という事も可能。

動かしたコマンドが想像以上に重たいし、キー入力も受け付けない時

大抵のシェル環境ではCtrl+zで、
「現在 fg 動作しているコマンドを一時停止( stopped )して、シェルコマンド入力画面に遷移する」
動作になっている。

ただしそのキーバインドが「仮想端末(仮想ターミナル)」のキーバインドと重複している場合は上記の限りではない。

まとめ

前座で;

「あー、コマンド入力で操作するコンピューターって、 シングルタスク じゃん。LinuxやFree(もしくはOpen)BSD、果てはUNIXが マルチタスク って言ってるのは誇張じゃねえのか?」
と思う方がもしかしたら居るかもしれないという杞憂で書き初めた。

と書いた通り実例を交えて書いた。

もっと詳しくは;

確実に man を読んだ方が有益である。

$ man man && man 1 bash

man 代わりのWebページ

想定される質問

  • 「それ、『タスク』じゃなくて『ジョブ』ですよね?」
    • A:それは思った。でも「デスクトップ環境」や「ウィンドウマネージャー」に慣れ親しんでいる方々はほぼ同じに捉えるかと浅はかで軽んじた発想で指を動かした。
17
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15