私はハードコードされたパイプから受け取った文字を受け取り、それeval
を試みるこのスクリプトを作成しました。私はスクリプトを呼び出しましたが、loop_executor.sh
これが含まれているすべてです。
!/bin/bash
while :
do
x=`cat /tmp/console_test`;
echo "received $x"
eval $x
done;
ダブルクリックしてスクリプトを実行します。
このプロセスでどのファイルが開いているかを確認したいと思います。
> $ pgrep loop_executor.sh
1234
> $ ll /proc/1234/fd
dr-x------ 2 userX domain^users 0 Oct 20 17:57 ./
dr-xr-xr-x 9 userX domain^users 0 Oct 20 17:57 ../
lr-x------ 1 userX domain^users 64 Oct 20 17:57 0 -> /dev/null
l-wx------ 1 userX domain^users 64 Oct 20 17:57 1 -> /dev/null
l-wx------ 1 userX domain^users 64 Oct 20 17:57 2 -> /home/local/groupX/userX/.xsession-errors
lr-x------ 1 userX domain^users 64 Oct 20 17:58 255 -> /home/local/groupX/userX/Desktop/loop_executor.sh*
lr-x------ 1 userX domain^users 64 Oct 20 17:57 3 -> pipe:[225812]
FD 3は「パイプライン」を指します。まあ、私はスクリプトからそのファイルをハードコーディングした人なので、それが使用しているファイルを知っていますが、可能であれば他のソースからこの情報を取得したいと思います(私のスクリプトはPOCなのでプロセスかもしれません)。誰のコードが私に公開されていないか)。
私の理解は、それがpipe:[225812]
私のファイルのinodeを指していないということです。
ll -i /tmp/console_test
16519395 prw-r--r-- 1 userX domain^users 0 Oct 20 18:14 /tmp/console_test|
だから私の質問は:プロセスがパイプ(私のシステム上のファイル)を開くことができる場合、このパイプが「該当する」ファイルを確認できますか?
重要な場合は、Ubuntu 12.04を使用しています。
[編集する]cat
私のパイプから読むプロセスを見つけてください。親プロセスと同じオープンパイプを持つため、ここに大きな違いはありません。 ->pipe:[225812]
ファイルがある場合、ファイルを見るだけではまだわかりません。
答え1
あなたのスクリプトは/tmp/console_test
まだ開いていませんが、cat
プロセスは開いています。あなたのスクリプトはプロセスに接続されたパイプからデータを読み取っていますcat
。これが質問に表示されます。
プロセスを検索してcat
プロセスを確認してください。
おそらく次のようなものが欲しいでしょう。
while read x; do
echo "received $x"
eval "$x"
done < /tmp/console_test
パラメータの周りに追加された引用符に注意してください。eval