
cat
私はこのコマンドを、ファイルを読み取ってそれをフィルタリング用にパイプする他の 2 つのコマンドとともに画面で実行するようにコーディングしようとしていますawk
。コマンドは次のとおりです。
screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt | awk '{print $1}' > /var/www/html/filter/first.txt
デタッチされた screen を確認すると、リストがフィルタリングされているのがわかります。フィルタリングが完了すると、ファイルは作成されますが空です。出力ログに screen をfirst.txt
使用することについて何かを見たことがありますが、出力はフィルタリングされていないリストがある同じフォルダーに出力し、 と呼びます。正常に実行されるのに、出力ファイルが毎回空になる理由がわかりません。これなしで実行すると、作成されたファイルは空ではありません。screen コマンドで何かが欠けていると思います。screen を使い始めたばかりです。他にいつ投稿すればよいかわかりません。-L
first.txt
screen -d -m
答え1
これが機能しない理由は、シェルがコマンドを次のように 2 つの部分に分割するためです。
screen -d -m /bin/cat /var/www/html/filter/unfiltered.txt
awk '{print $1}' >/var/www/html/filter/first.txt
は別のptyでscreen
実行されます。出力はありません。cat
標準出力にパイプしますawk
。
パイプを screen の下で実行したい場合は、それをシェルの別のインスタンスとグループ化する必要があります。
screen -d -m bash -c 'cat /var/www/html/filter/unfiltered.txt | awk "{print $1}" >/var/www/html/filter/first.txt'
これを実行すると、これは不必要な使用でありcat
、実際にはコマンドは次のように簡略化できることが明らかになります。
screen -d -m bash -c 'awk "{print $1}" </var/www/html/filter/unfiltered.txt >/var/www/html/filter/first.txt'
内部の引用符を一重引用符から二重引用符に変更したことに注意してください。これは、コマンド全体を保護するために (特に$1
早期評価から) 一重引用符を使用したためです。