日本語版
最新ニュース
科学&テクノロジー

コマンドラインに猫のいない猫

2020年7月30日コマンドラインでファイルの内容を表示したいとします。私たちのほとんどが最初に手を伸ばすツールは、 cat、これだけで素晴らしい仕事をします。しかし、Linux マシン上でファイルを cat しようとするとどうなるでしょうか。$ cat file.txt -bash: cat: command not found または:$ cat file.txt bash: fork: retry: No child processes この投稿では、このアイデアを検討し、これの特徴を説明します チャレンジ シェルの外部のユーティリティを使用せずにファイルの内容を表示する必要がある場合。シェルの組み込み、リダイレクト、サブシェルの使用シェル組み込みの使用 read 新しいプロセスをフォークせずに、ファイルの内容を表示できます。while read line; do echo $line; done ヘルプページより read:標準入力、または -u オプションが指定されている場合はファイル記述子 FD から…

1729495819
2024-10-21 06:41:00

コマンドラインでファイルの内容を表示したいとします。私たちのほとんどが最初に手を伸ばすツールは、 cat、これだけで素晴らしい仕事をします。しかし、Linux マシン上でファイルを cat しようとするとどうなるでしょうか。

$ cat file.txt
-bash: cat: command not found

または:

$ cat file.txt
bash: fork: retry: No child processes

この投稿では、このアイデアを検討し、これの特徴を説明します チャレンジ シェルの外部のユーティリティを使用せずにファイルの内容を表示する必要がある場合。


シェルの組み込み、リダイレクト、サブシェルの使用

シェル組み込みの使用 read 新しいプロセスをフォークせずに、ファイルの内容を表示できます。

while read line; do
  echo $line;
done 

ヘルプページより read:

標準入力、または -u オプションが指定されている場合はファイル記述子 FD から 1 行が読み取られ、最初の単語が最初の NAME に割り当てられます。

この例では、file.txt の内容が次の STDIN にリダイレクトされます。 read、ファイルの終わりに達するまで入力を 1 行ずつ処理します。 read STDIN の代わりにファイル記述子を入力として受け取ることもできるため、これも機能します。

exec 3# Assign file descriptor 3 for reading
while read -u 3 line; do
  echo $line
done

これでは、単に入力するだけではなく、はるかに多くの入力作業が必要になります。 cat file.txt。と bash または zsh を使用せずにファイルの内容を表示する別の方法があります。 cat:

この方法はリダイレクトとコマンド置換を使用しており、bash のマニュアル ページで説明されています。

コマンド置換 $(cat file) は、同等で高速な $( に置き換えることができます。

猫をフォークしていないため、処理が速くなりますが、それは重要ですか?おそらくそうではなく、何をしているのか誰にも明確ではないかもしれませんが、シェルで簡単なテストを行うと違いがわかります。

$ time for n in {1..1000}; do \
    echo $(/resolv.conf) >/dev/null; \
  done

real	0m0.977s
user	0m0.380s
sys	0m0.604s
$ time for n in {1..1000}; do \
    cat /etc/resolv.conf >/dev/null;
  done

real	0m1.980s
user	0m0.626s
sys	0m1.224s

この構文 $( may look a bit strange, what you are doing is command substitution, where the contents of file.txt STDIN に送信され、STDOUT としてエコーされます。を使用したリダイレクトについてもう少し詳しく知りたい場合は、 > そして see my earlier post about shell redirection.

他のユーティリティの使用

他のオプションはどうですか?シェル組み込みを使用せずに、代わりに他の標準ユーティリティを使用して、cat なしで cat を実行することもできます。

ul ファイル内の一部の単語に誤って下線を引いてしまう可能性がありますが、これが 2 文字だけのファイルを cat する唯一の方法かもしれないと思います。

まだ推測していない場合は、 tac は、GNU コア ユーティリティの逆です。 cat したがって、賢明にしたい場合は、次の出力をパイプすることができます tactac それはただの cat

もちろん次のようなツールを使用します sedperlpython、などを使用すると、ファイルを猫化することもできます。幸せな猫化を!

猫を使わずに猫を飼う他の方法に興味がありますか?試してみてください おっとチャレンジ

#コマンドラインに猫のいない猫

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。