重要なポイント
- Linux および macOS の「yes」コマンドは、「yes」または「no」の文字列など、選択した任意のメッセージを繰り返し生成できます。
- 「yes」コマンドからの出力を他のプログラムまたはスクリプトにパイプして、自動応答を提供できます。
- 「yes」コマンドを使用すると、出力をファイルにリダイレクトすることで、大きなファイルを迅速に生成することもできます。
yes コマンドは簡単すぎて実際には役に立たないように思えますが、このチュートリアルでは、その応用例と、Linux と macOS でその蓄積された利点を活用する方法を示します。
yes コマンドは何をするのでしょうか?
コマンド ライン パラメーターを指定せずに yes コマンドを使用すると、「y」を入力して Enter キーを何度も (何度も) 押したかのように動作します。非常に迅速に。そして、Ctrl+C を押して中断するまで、この処理が継続されます。
はい
実際、yes を使用すると、選択したメッセージを繰り返し生成できます。 「はい」、スペース、使用する文字列を入力して、Enter キーを押すだけです。これは、yes に「はい」または「いいえ」の文字列の出力ストリームを生成させるためによく使用されます。
はいはい
はい、好きなものなら何でも
しかし、それは何の役に立つのでしょうか?
「yes」からの出力は、他のプログラムまたはスクリプトにパイプ処理できます。
これには聞き覚えがあるでしょうか?長いプロセスの実行を開始し、実行したままにして終了します。コンピュータに戻ったとき、プロセスはまったく完了していません。あなたが不在の間、システムはあなたに質問をし、「はい」または「いいえ」の返答を待っています。
すべての答えが肯定的 (「はい」または「y」) または否定的 (「いいえ」または「n」) になることが事前にわかっている場合は、yes を使用してそれらの応答を提供できます。長いプロセスは無人で完了まで実行され、プロセスで尋ねられる質問に「はい」と入力すると回答が得られます。
スクリプトでの yes の使用
次の Bash シェル スクリプトを見てください。 (これは、実行にかなりの時間がかかる、より大規模なスクリプトの一部であることを想像する必要があります。)
#!/bin/bash
# ...
# in the middle of some long script
# obtain a response from the user
# ...
echo "Are you happy to proceed? [y,n]"
read input
# did we get an input value?
if [ "$input" == "" ] ; then
echo "Nothing was entered by the user"
# was it ay or a yes?
elif [[ " $input " == "y" ]] || [[ " $input " == "yes" ]]; then
echo "Positive response: $input "
# treat anything else as a negative response
else
echo "negative response: $input "
fi
このスクリプトは質問をし、応答を待ちます。スクリプト内のロジック フローは、ユーザーからの入力によって決定されます。
- 「はい」または「y」は肯定的な応答を示します。
- それ以外の入力は否定的な応答とみなされます。
- テキストを入力せずに Enter キーを押しても何も起こりません。
これをテストするには、スクリプトをファイルにコピーし、「long_script.sh」という名前で保存します。 chmodを使用して実行可能にします。
chmod +x long_script.sh
次のコマンドでスクリプトを実行します。 「yes」、「y」などを入力として入力してみてください (テキストを入力せずに Enter キーを押すなど)。
./long_script.sh
スクリプトの質問に対する応答として「yes」を取得するには、「yes」からの出力をスクリプトにパイプします。
はい | ./long_script.sh
スクリプトによっては、要件がより厳格で、「はい」という完全な単語のみを肯定的な応答として受け入れます。次のように、yes へのパラメータとして「yes」を指定できます。
はい、はい | ./long_script.sh
よく考えずに「はい」とは言わないでください
スクリプトまたはプログラムに入力しようとしている入力が確実に期待する結果をもたらすことを確信する必要があります。その決定を下すには、質問とその答えがどうあるべきかを知っておく必要があります。
スクリプト、コマンド、またはプログラムのロジックが期待と一致しない可能性があります。このサンプル スクリプトでは、質問は「停止しますか? [y,n]」だったかもしれません。その場合は、否定応答によってスクリプトの続行が許可されたはずです。
気軽に
yes
をパイプする前に、スクリプト、コマンド、またはプログラムに精通している必要があります。
コマンドでの yes の使用
初期段階では、
yes
他の Linux コマンドと一緒に使用されていました。それ以来、他の Linux コマンドのほとんどは、人間の介入なしで独自の方法で実行できるようになりました。これを達成するために、
yes
は必要なくなりました。
Ubuntu パッケージ マネージャー
apt-get
を例に挙げてみましょう。インストールの途中で「y」を押さずにアプリケーションをインストールするには、次のように
yes
を使用します。
はい | sudo apt-get install Fortune-mod
apt-get
の
-y
(yes と仮定) オプションを使用すると、同じ結果が得られます。
sudo apt-get -y install Fortune-mod
apt-get
が通常の「続行しますか? [Y/n]」という質問さえ行っていないことがわかります。答えが「はい」であると仮定しただけです。
他の Linux ディストリビューションでも状況は同じです。 Fedora では、かつては次のようなパッケージ マネージャー コマンドを使用したでしょう。
はい | yumフォーチュンMODをインストールします
dnf
パッケージ マネージャーは
yum
を置き換え、
dnf
独自の
-y
(yes と仮定) オプションがあります。
dnf -y フォーチュン mod をインストールします
cp
、
fsck
、および
rm
にも同じことが当てはまります。これらのコマンドにはそれぞれ、独自の
-f
(強制) または
-y
(はいを想定) オプションがあります。
それでは、
yes
スクリプトを操作することのみに追いやられているように見えますか?完全ではありません。老犬にはまだいくつかのトリックがあります。
さらにいくつかのはいトリック
seq
によって生成された一連の数字とともに
yes
を使用すると、繰り返されるアクションのループを制御できます。
このワンライナーは、生成された数字を端末ウィンドウにエコーし、1 秒間
sleep
を呼び出します。
単純に数字を端末ウィンドウにエコーする代わりに、別のコマンドまたはスクリプトを呼び出すことができます。そのコマンドやスクリプトでは数字を使用する必要さえなく、ループの各サイクルを開始するためにのみ存在します。
はい "$(seq 1 20)" |数字を読み取っている間。エコーディジットを実行します。睡眠1;終わり
テスト用に大きなファイルがあると便利な場合があります。おそらく、 zip コマンド の使用を練習したい場合や、 FTP アップロード をテストするための大きなファイルが必要な場合があります。
yes
を指定すると、大きなファイルを迅速に生成できます。必要なのは、処理する長いテキスト文字列を指定し、出力をファイルにリダイレクトすることだけです。間違えないでください。これらのファイルは急速に増大します。数秒以内に Ctrl+C を押す準備をしてください。
はい、ファイルパディング用の無意味なテキストの長い行 > test.txt
ls -lh テスト.txt
トイレテスト.txt
ここで生成されたファイルは、この記事の調査に使用したテスト マシンで約 5 秒かかりました。
ls
そのサイズが 557 MB であると報告し、
wc
その中に 1,240 万行があると報告します。
コマンド文字列に
head
含めることで、ファイルのサイズを制限できます。ファイルに何行含めるかを指示します。
-50
は、
head
が
test.txt
ファイルに 50 行だけを挿入することを意味します。
はい、ファイルパディング用の意味のないテキストの長い行 | head -50 > test.txt
test.txt
ファイルが 50 行になるとすぐにプロセスが停止します。 Ctrl+C を使用する必要はありません。自らの意志で優雅に停止します。
wc
、ファイル内にちょうど 50 行、400 ワードがあり、サイズが 2350 バイトであると報告します。
yes コマンドは、Linux や macOS などの他の
Unix 系オペレーティング システム
で最も単純なコマンドの 1 つです。 System 7 Unix でリリースされ、
Ken Thompson
によって作成されたオリジナル バージョンのソース コードは、わずか
6 行のコード
です。
yes
コマンドは、長時間実行されるスクリプト (およびその他のいくつかのトリック) に応答をフィードするのには依然として便利ですが、毎日使用するコマンド ツールキットの一部にはなりません。しかし、実際に必要なときには、そのシンプルさ自体が 6 行の黄金のコードにまとめられていることがわかります。





