次の行が現在のディレクトリ内のファイルを 1 回だけ (3 回ではなく) 印刷するのはなぜですか?
これは試験からの問題です。それについて読むためのソースを知っていれば、それは素晴らしいことです
cp /bin/ls blah
cat blah blah blah >bbb
chmod u+x bbb
bbb
次の行が現在のディレクトリ内のファイルを 1 回だけ (3 回ではなく) 印刷するのはなぜですか?
これは試験からの問題です。それについて読むためのソースを知っていれば、それは素晴らしいことです
cp /bin/ls blah
cat blah blah blah >bbb
chmod u+x bbb
bbb
次のようなものが必要です。
cp /bin/ls/blah .
cat blah blah blah >bbb
chmod u+x bbb
./bbb
最初の違いは へのパラメータの数ですcp
。ソースだけでなく宛先も指定する必要があります。2 つ目の違いは、パスに現在のディレクトリがない場合、現在のディレクトリにあるプログラムを実行する./command
だけでなく、を使用する必要があることです。command
それに加えて、 の内容を知ることが重要です/bin/ls/blah
。そのファイルが次のようなものを含む bash スクリプトである場合:
#!/bin/ls
ls
この回答の冒頭にある変更されたコード ブロックは、期待どおりに機能します (現在のディレクトリの内容の 3 倍を出力します)。ファイルがバイナリ ファイルの場合、バイナリ ファイルを連結することはできず、結果のファイルが元のバイナリ ファイルの 3 つの連続した実行として動作することを期待できないため、おそらく機能しません。
更新:編集後、答えは明らかに変わります。さて、最後の部分だけがそれに適用されます。はバイナリ ファイルであるため/bin/ls
、バイナリ ファイルを連結して、結果のファイルが元のバイナリ ファイルの 3 つの連続した実行として動作することを期待することはできません。ただし、バイナリ ファイルの代わりにスクリプトを使用している場合でも、この例は機能します。
ls
ELF バイナリには明確なサイズと構造があるため、バイナリに含まれる他の 2 つのコピーを実行する方法はありませんbbb
。