yes コマンド入門 - 対話プロンプトを自動応答する
この記事でわかること
- yes コマンド が何をするコマンドなのか分かる
- 「本当に削除しますか? (y/n)」のような 対話プロンプトに自動で答える 方法が分かる
- yes コマンドが なぜ危険になりうるか と、その回避方法が分かる
-yオプションなど、yes より 安全な代替手段 が分かる
結論(先に覚えるべき型)
- とりあえず全部
yで答えたい →yes | コマンド - でも基本は コマンド自身の
-yオプション を使うほうが安全 - yes を止めるには Ctrl + C
1. yes コマンドって何?
結論: yes は
yという 1 文字を、止めるまで無限に出力し続けるだけのコマンド。
yes っていう名前のコマンドがあるって聞いたんですけど、何をするんですか? 「はい」って答えるコマンド?yes は名前のとおりだけど、もっと単純だよ。y という文字を、止めるまでひたすら出力し続けるだけ のコマンドなんだ。y で埋め尽くされて止まらなくなるよ。止め方を先に教えるね。Ctrl + C を押せば止まる。それを覚えてから試してみて。実際に打つとこうなる(すぐ Ctrl + C で止めること)。
$ yes
y y y y (Ctrl + C で止めるまで延々と続く)
yes を引数なしで打つと 無限に y が出力され続ける。慌てず Ctrl + C を押して止めること。これは故障ではなく、yes の正常な動作。
2. なぜ「無限に y を出す」コマンドが役に立つの?
結論: 「本当に実行しますか? (y/n)」と何度も聞いてくるコマンドに、その y を自動で流し込むため。
y を無限に出すなんて、何の役に立つんですか?|)と組み合わせたとき に出るんだ。rm が 1 個ずつ「本当に消す? (y/n)」と聞いてくることがある。100 個あったら 100 回 y を打つことになる。そこで yes の出番。yes が活躍する場面
「本当に実行しますか? (y/n)」のような 確認プロンプトを何度も出すコマンド に対して、その y を自動で供給する。これで人間が何度も y を打つ手間が省ける。
3. パイプで自動応答する:yes | コマンド
結論:
yes | コマンドで、コマンドが出す確認プロンプトすべてに自動でyが渡される。
たとえば、-i(確認あり)オプション付きの rm は、削除のたびに確認してくる。
$ rm -i file1.txt file2.txt file3.txt
rm: remove regular file 'file1.txt'?
ここで毎回 y を打つ代わりに、yes をパイプでつなぐと、すべての確認に自動で y が渡される。
$ yes | rm -i file1.txt file2.txt file3.txt
yes | を頭に付けただけで、全部の確認に答えてくれるんですね!y を流し続けて、rm がそれを 1 個ずつ受け取って消していく。確認の回数がいくつでも対応できるよ。これは便利だが 同時にとても危険。確認をすべて飛ばすということは、間違ったファイルも問答無用で消える ということ。実行前にコマンドの対象を必ず確認すること。詳しくは後の「yes の危険性」で扱う。
4. 任意の文字列を繰り返す:yes STRING
結論:
yesに引数を付けると、yの代わりにその文字列を繰り返し出力する。
yes は y 専用ではない。引数を渡すと、その文字列を繰り返す。
$ yes hello
hello hello hello (Ctrl + C まで続く)
複数の単語を渡すと、スペースでつないで 1 行にする。
$ yes I am ready
I am ready I am ready (Ctrl + C まで続く)
空文字を繰り返す(Enter 連打の代わり)
yes "" とすると、空の行(改行だけ)を繰り返す。「ただ Enter を押し続ける」だけでよいプロンプトに使える。
$ yes "" | コマンド
5. 回数を区切って使う:yes | head
結論:
yesをheadとつなぐと、無限ではなく決まった行数だけ取り出せる。テストデータ作りに便利。
無限なのが困る場合は、head で必要な行数だけ取り出す。
$ yes | head -n 5
y y y y y
任意の文字列でも同じ。同じ行を 3 つ並べたテキストが一瞬で作れる。
$ yes test | head -n 3
test test test
head で「ここまで」と切るんですね。head -n 回数 で好きな行数に区切れる。6. yes の危険性
結論: yes は確認を全部スキップするため、削除や上書きなど取り返しのつかない操作と組み合わせると事故になる。
yes | って万能じゃないですか。全部これで済ませちゃダメなんですか?特に危険な組み合わせ
yes | rm -ri ディレクトリ/— 中身を確認なしで全削除yes | コマンド(上書き・初期化系) — 大事なデータを確認なしで上書き
確認の意味があるからプロンプトが出ている。yes で潰す前に、コマンドの対象(どのファイル・どのディレクトリか)を必ず目で確認すること。
自分が何を実行しようとしているか分からないコマンドに yes | を付けない。ネット上のコマンドをコピペするとき、頭に yes | が付いていたら特に警戒すること。
7. yes より安全な代替手段
結論: 多くのコマンドは自前の
-y/--yesオプションを持つ。yes パイプよりこちらを優先する。
実は、確認を省きたいだけなら yes を使わずに済むことが多い。コマンド自身が 「はい」を指定するオプション を持っているからだ。
コマンド自身の確認スキップオプション(一例)
| コマンド | 確認をスキップするオプション |
|---|---|
apt |
-y / --yes |
dnf / yum |
-y |
cp / mv |
-f(強制) |
rm |
-f(確認を出さない) |
例: sudo apt install -y パッケージ名
apt install -y の -y って、まさに「はい」なんですね!使い分けの目安
- 専用の
-y/-fオプションがある → そちらを使う(安全・意図が明確) - 専用オプションがない、または何度も繰り返し聞かれる →
yes |を検討(対象を確認したうえで)
8. ミニ課題:実際にやってみよう
結論: yes の出力、回数の区切り、任意文字列の 3 問で基本を手で確かめる。Ctrl + C を忘れずに。
Ctrl + C で止められるから、安心して試してみて。課題1: yes を引数なしで実行して、y が出力されることを確認し、Ctrl + C で止めてみよう。
ヒントを見る
yes と打って Enter。画面が y で埋まったら Ctrl + C を押す。
解答例
$ yes
止めるには Ctrl + C。
課題2: OK という文字列を、ちょうど 4 行だけ出力しよう。
ヒントを見る
yes 文字列 と head -n 行数 をパイプでつなぐ。
解答例
$ yes OK | head -n 4
課題3: apt でパッケージをインストールするとき、確認を省く方法を、yes コマンドを使わずに書いてみよう。
ヒントを見る
コマンド自身の -y オプションを使う。
解答例
$ sudo apt install -y パッケージ名
9. コピペ用テンプレート
結論: 自動応答・回数区切り・空行・安全な代替の型をまとめて手元に置いておく。
よく使う型をまとめておく
# 確認プロンプトに自動で y を答える(対象を確認してから) yes | コマンド # 同じ行を決まった回数だけ出力(テストデータ作成) yes | head -n 5 yes test | head -n 3 # 空行(Enter)を繰り返す yes "" | コマンド # 【推奨】専用オプションで確認をスキップ sudo apt install -y パッケージ名 # yes を止める Ctrl + C