「このファイルが実行されたとき、それは次の操作を行いますというファイルに次のコマンドを追加します。このファイルを表示します)実行中にshに行数を表示する方法は?
4は、Xライン )このファイルには、xの言葉を持って表示してい
6)このファイルはxバイトで表示されます "
私はこのコマンドがwcのバリエーションであることは知っていますが、そのコマンドをスクリプトに追加する方法を知ることはできません。
「このファイルが実行されたとき、それは次の操作を行いますというファイルに次のコマンドを追加します。このファイルを表示します)実行中にshに行数を表示する方法は?
4は、Xライン )このファイルには、xの言葉を持って表示してい
6)このファイルはxバイトで表示されます "
私はこのコマンドがwcのバリエーションであることは知っていますが、そのコマンドをスクリプトに追加する方法を知ることはできません。
lines=$(wc -l $0)
echo This file has $lines lines
words=$(wc -w $0)
echo This file has $words words
bytes=$(wc -b $0)
echo This file has $bytes bytes
はすべきことです。
THANKYOUまさに私が探していたもの – codingchallenged
プログラムにユーザーの入力を求めてもらうのに問題があります。私はreadコマンドを使わなければならないことを知っていますが、スクリプトを入力する方法をよく分かりません。 – codingchallenged
bash process substitutionを使用すると1ライナーです。
$ read lines words bytes filename < <(wc /path/to/file)
出力も1ライナーで、必要に応じてbashアレイを活用できます。ここでは実際の例です:
$ read -a arr < <(wc /etc/passwd);
$ declare -p arr
declare -a arr=([0]="96" [1]="265" [2]="5925" [3]="/etc/passwd")
$ unset arr[3]
$ printf 'lines: %d\nwords: %d\nbytes: %d\n' "${arr[@]}"
lines: 96
words: 265
bytes: 5925
POSIXシェルで
同様の結果は、一時ファイルを使用して達成される可能性があります :
$ tmp=$(mktemp /tmp/foo.XXXX)
$ wc /etc/passwd > $tmp
$ read lines words bytes filename < $tmp
$ rm $tmp
$ printf 'lines: %d\nwords: %d\nbytes: %d\n' "$lines" "$words" "$bytes"
lines: 96
words: 265
bytes: 5925
それとも、一時ファイルなしでここ-docのようにデータを取り出すことができます。
$ read lines words bytes filename <<EOT
> $(wc /etc/passwd)
> EOT
(スクリプトにこのだったら当然、あなたは対話型のプロンプトを取り除くと思います。)
出力はがecho
を超えていることが推奨されています。これは、異なるオペレーティングシステムとシェルで一貫しているためです。 This excellent postはいくつかの考慮事項を説明します。
スクリプトの最初の行に追加するだけで、魔女は必要な値を数えて印刷します。スクリプト名をparamとして取得するラッパーを作成したら、それらの値を数え、その値を出力してからスクリプトを実行してください。 – darvark
あなたが試したこと、あなたが得た結果、探していた結果を見せてくださいために?コードがあなたの質問に含まれていない場合、あなたのコードを修正する方法をお勧めすることは非常に難しいです。 – ghoti