私のタスク全体は、「現在作業しているユーザー数を表示し、誰かがログアウトまたはログインするたびに新しいユーザー数を印刷します。新しい画面を作成してテキスト結果を印刷します」と同じです。最初の部分ではかなりうまく処理しました。コードは次のとおりです。
#!/bin/bash
updateusers(){
log=$( who | grep "st" | awk '{print $1}' | wc -l);
}
updateusers
temp=$log
echo "Now logged users: $lrn"
while true
do
updateusers
if [ $temp -lt $log ]; then
temp=$log
echo "User has logged in : $log"
fi
if [ $temp -gt $log ]; then
temp=$log
echo "User has logged out: $log"
fi
sleep 1
done
2番目のタスクは、スクリプト内に2番目の画面を作成し、このスクリプトのテキストをここに印刷することです。私はとscreen -S name -p 0 -X stuff "text here/echo command with text"
を使用しましたecho text > screen -S name -p 0
。これらのどれも私には効果がありません。
答え1
echo
スクリプトの出力(さまざまなコマンド)を一時ファイルにリダイレクトし、その一時ファイル名を引数としてcat
画面内でコマンドを実行する必要があります。それはまるで
myreport >foo
screen -S name -X stuff "cat foo"
rm foo
(たとえば、一時ファイルを作成するよりエレガントな方法がありますがmktemp
)。最初のステップとして、レポートスクリプトを関数(または別々のファイル)にすると、その出力をリダイレクトできます。