\r\n\r\n
yesコマンドはシンプルすぎて実用的ではないと思われるかもしれませんが、このチュートリアルでは、その応用と、LinuxとmacOSで抑制されたポジティブの恩恵を受ける方法についてご紹介します。
yesコマンドは、LinuxやmacOSなどのUnix系OSで最もシンプルなコマンドの1つです。シンプルというのは、使い方や初期導入が簡単という意味です。system7unixでリリースされたオリジナル版のソースコードはkenthompsonによって書かれ、全部でわずか6行のコードで構成されています。
しかし、単純な小さなコマンドだからといって見過ごさないでください。
コマンドライン引数なしでyesコマンドを使用すると、あたかも「y」を入力してEnterキーを繰り返し押しているような動作になります(何度も何度も繰り返し)。とても速いです。Ctrl+Cキーを押して中断するまで続けます。
yes実は、この「イエス」を使って、好きなメッセージを繰り返し生成することができるのです。yesとスペース、そして使いたい文字列を入力し、Enterキーを押すだけです。これは通常、yes が "yes" または "no" の文字列の出力ストリームを生成するために使用されます。
yes yes yes anything you likeyesの出力は、他のプログラムやスクリプトにパイプで接続することができます。
聞き覚えはありませんか?長いプロセスを開始し、そして立ち去り、それを継続させる。パソコンに戻ると、まだ処理が完了していません。あなたがいない間に、質問をして、「はい」か「いいえ」の答えを待っている状態です。
すべての回答が肯定的(「はい」または「y」)または否定的(「いいえ」または「n」)であることが事前に分かっている場合は、「はい」または「y」を選択します。") を使用すると、これらの回答を提供することができます。その後、あなたの長いプロセスは完了まで無人で実行され、プロセスに対する質問も****されます。
以下のbashshellスクリプトを参照してください。(これは、実行にかなりの時間を要する大きなスクリプトの一部であることを想像する必要がある)。
#!/bin/bash # ... # in the middle of some long script # obtain a resp***e 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 a y or a yes? elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then echo "Positive resp***e: $input" # treat anything else as a negative resp***e else echo "negative resp***e: $input" fiこのスクリプトは、質問をして回答を待つものである。スクリプト内のロジックフローは、ユーザーの入力によって決定される。
試しに、このスクリプトをファイルにコピーし、long_script.sh という名前で保存して、chmod で実行可能にしてみてください。
chmod +x long_script.sh以下のコマンドでスクリプトを実行し、"yes"、"y"、およびその他の入力(テキストを入力せずにEnterキーを押すことを含む)を試してください。
./long_script.shスクリプト化された質問に対してyesが回答を提供するようにするには、yesの出力をスクリプトにパイプします。
yes | ./long_script.shスクリプトの中には、より限定的で、完全な「はい」しか肯定的な回答として受け付けないものもあります。yesパラメータとして、以下のように "yes "を指定することができます。
yes yes | ./long_script.shスクリプトやプログラムに入力しようとする入力が、間違いなく望ましい結果をもたらすことを確認する必要があります。判断するためには、質問と答えを知らなければなりません。
スクリプト、コマンド、プログラムのロジックは、あなたの期待にそぐわない場合があります。このスクリプトの例では、"Do you want to stop? "と質問されるかもしれません。その場合、否定的な回答をすると、スクリプトを続行することができます。
スクリプト、コマンド、プログラムに慣れてからでないと、簡単に「はい」を持ち込むことはできません。
当初、yesは他のLinuxコマンドと組み合わせて使用される予定です。それ以降、他のほとんどのLinuxコマンドは、人間の手を借りずに、独自の方法で実行できるようになります。は不要になりました。
Ubuntuのパッケージマネージャapt-getを例にとって説明します。インストール中に "y "を押すことなくアプリケーションをインストールするには、次のように "yes "を使用します。
yes | sudo apt-get install fortune-modapt get の -y (assumed) オプションを使っても同じ結果になります。
sudo apt-get -y install fortune-modapt-get は通常の "Do you want to continue?" [yes/no] という質問さえしないことにお気づきでしょう。
他の Linux ディストリビューションでも同様で、Fedora では、このタイプのパッケージマネージャーコマンドを使ったことがあるかもしれません:。
yes | yum install fortune-modyumに代わってdnfパッケージマネージャが登場し、dnfには独自の-y(仮定)オプションがあります。
dnf -y install fortune-modcp, fsck, rm も同様です。 これらのコマンドにはそれぞれ -f (force) または -y (assuming yes) というオプションが用意されています。
老犬はまだまだ芸がある。
seqで生成される数値の並びでyesを使用すると、繰り返し操作のサイクルを制御することができます。
この行は、生成された数値を端末ウィンドウに表示し直し、1秒間sleepを呼び出します。
単に数字をターミナルウィンドウに表示し直すのではなく、別のコマンドやスクリプトを呼び出すことができます。コマンドやスクリプトでは数字を使う必要さえなく、ループの各サイクルを開始するためにのみ使用されます。
yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; doneテスト用に大きなファイルを用意しておくと便利なことがあります。おそらく、zipコマンドの使い方を練習したいとか、FTPアップロードをテストするためにかなり大きなファイルを用意したいとか、そういうことでしょう。
大容量のファイルを素早く生成するために、yesを使うことができます。必要なのは、長いテキスト文字列を与えて、その出力をファイルにリダイレクトすることだけです。間違いなく、これらのファイルはすぐに大きくなります。数秒後にCtrl+Cを押せるように準備しておいてください。
yes long line of meaningless text for file padding > test.txt ls -lh test.txt wc test.txtlsでは557MB、wcでは1240万行と表示されている。
コマンドストリングにheadを含めることで、ファイルサイズを制限することができるのです。ファイルに何行含めるかを指示します。-50 は、ヘッダーが test.txt ファイルを通して 50 行しか許可しないことを意味します。
yes long line of meaningless text for file padding | head -50 > test.txtこの処理は、test.txt ファイルに 50 行があるとすぐに停止します。Ctrl+C を使用する必要はありません。
wcは、ファイル内にちょうど50行、400ワード、2350バイトのサイズがあることを報告しています。
yesコマンドは、長時間実行されるスクリプトに応答を与えるのに便利ですが(他にもいくつかのトリックがあります)、日常的なコマンドのツールボックスの一部にはならないでしょう。しかし、いざ必要になってみると、シンプルそのものであり、6行のゴールデンコードであることに気づくはずです。