次のスクリプトを使用してフォルダを監視しており、サイズが変更され、ファイルが存在しない場合はスクリプトが実行されます。
#!/usr/bin/sh
SCRIPT="dim_import/xdir"
while true;
do
size=$(du -s dim_import | cut -b 1-2)
if [ $size -gt 32 ]; then
if [ ! -f files ]; then
$SCRIPT
fi
fi
sleep 2
done
私はそうスクリプトを実行します。
>watcher &
問題は、ウォッチャーで実行されるスクリプトに入力が必要であることです。プロンプトをエコーしますが、入力はそのスクリプトではなく現在のシェルに送信されます。したがって、1234を入力すると、次のような結果が得られます。
sh: 1234: not found.
入力が正しい場所に送信されているかどうかを確認できますか?
私はいろいろな方法を試しましたが、私がするユニークな方法のためにそれらの何も動作しないようです。また、より良いアプローチ/解決方法で開いています。スクリプトは、パラメーターに送信する入力を処理することもできます。
編集:62918と同じ番号を送信しようとしています。
編集:これを行うこともできますが、同じエラーが発生します。
SCRIPT="dim_import/xdir"
while true;
do
size=$(du -s dim_import | cut -b 1-2)
if [ $size -gt 32 ]; then
if [ ! -f files ]; then
echo "SR Number: "; read srNum
$SCRIPT $srNum
fi
fi
sleep 2
done
メモ:私はBashを使用しません。私はShを使用しています。
答え1
さて、実際の質問は、実際にスクリプトにどのような入力を送信したいのかということです。空の入力が必要な場合は、次を実行します。
$SCRIPT < /dev/null
$sizeの内容などの特定の入力を提供するには、次のようにします。
echo "$size" | $SCRIPT
入力を入力するには、入力を入力するために前景に戻し、バックグラウンドに戻す必要があります。これを行う能力は、シェルにジョブ制御機能があるかどうかによって異なります(ほとんどはありますが、元のBourneシェルにはありません)。以下を行います。
- 実行する
fg %watcher
かfg %1
(実行後に表示されるジョブ番号を使用してjobs -l
)プロセスをフォアグラウンドにインポートします。 - 必要な内容を入力してEnterを押します。
- Ctrl-Zと入力してバックグラウンドに戻ります(または停止文字が何であるかを確認する
stty -a
ために使用してチェックします)。susp
bg %1
Ctrl-Z(または任意の数字)を押してプログラムを停止し、バックグラウンドに戻ります。
もう一つの答えは、名前付きパイプを使用することです。例は次のとおりです(tr
表示にスクリプトの代わりに使用されます)。
$ mkfifo my_fifo
$ tr a-z A-Z < my_fifo &
$ exec 6> my_fifo
$ echo here is some input for the fifo >&6
$ HERE IS SOME INPUT FOR THE FIFO
まず、スクリプトを実行してfifoから入力を受け取ります(最初にスクリプトを実行することが重要です)。次に、exec 6> ...
シェルのファイル記述子6をfifoに書き込みます。次に、出力を送信したいときはいつでも(経由で>&6
)ファイル記述子6に書き込みます。最後の「HERE IS...」は私が入力したものではなく、単にtrの出力です。
答え2
多くの研究は、制約のためにこれが不可能であることを確認しました。しかし、理想的ではない解決策を見つけました。
デフォルトでは、名前付きパイプ(「.in」と呼ばれる)を作成し、ここに情報を送信します。 「i[input]」型を実行するための関数を作成しました。
SCRIPT=".dim_import/xdir"
while true;
do
size=$(du -s .dim_import | cut -b 1-2)
if [ $size -gt 32 ]; then
if [ ! -f ~/files ]; then
echo "SR Number (i [number]): ";
read srNum < ~/.in
$SCRIPT $srNum
sleep 10
~/scripts/listSR
fi
fi
if [ ~/ ]
sleep 5
done
紹介機能:
function i
{
set +u
echo $1 > ~/.in
set -u
}