私はBashスクリプトを使ってgit pullを自動化しようとしました。スクリプトの実行結果を見逃すことなく、これらの結果がどこかに記録され、問題があるかどうかを確認できるように、スクリプトに次の行を追加しました。
# Does git pull
`notify-send "Git pull log message" |tee -a "$mylogfile"
# Other stuff
スクリプトの残りの部分はうまく機能し、git pull自動化などの期待される作業を行います。特定の通知はnotify-send
マイコンピュータにもよく表示され、通知リストからアクセスできます。
私の問題は通知を()にインポートすることです|tee -a $mylogfile
。通知メッセージをファイルにまったくリダイレクトしません$mylogfile
。私も次のことを試しました。
notify-send "Git pull log message" |tee "$mylogfile"
notify-send "Git pull log message" > "$mylogfile"
notify-send "Git pull log message" >> "$mylogfile"
何も書かれていないようです。また、スクリプトと端末でこれらのコマンドを実行しましたが、動作は同じです。マニュアルページnotify-send
も非常に短く、ファイルI / Oコマンドの使用方法については言及していません。 Stack Exchangeでも関連する質問が見つかりませんでした。 [this][1] が最も近いですが、ファイルを入力として提供するのではなく、通知出力をファイルに送信しようとしています。端末に出力が表示されないため、何もリダイレクトされないようです。これは、標準出力には何も記録されないことを意味します。
私の考えでは、次のようなもので満足できると思います。
msg="Git pull log message"
notify-send "$msg" && echo "$msg" > "$mylogfile"
これはコマンドを2行に分けて変数を使用して機能しますが、スクリプトに通知とロギングに関連する行だけがあり、他に何もないように明示的な変数なしで1行にしておきたいと思います。
私は明らかなものを見逃しているに違いないと確信しています。助けてください? [1]:https://askubuntu.com/questions/216326/can-i-redirect-file-as-input-to-notify-send
答え1
事実、質問を書く過程で知った事実は、このコマンドこれは私が解決策を見つけるように動機付けるのに十分でした。同じ状況の他の人にも役立つ可能性があり、このSEサイトや他のサイトで重複した質問が見つからないため、以下のように共有してください。
echo "Git pull log message" |tee -a "$mylogfile" |xargs -I% notify-send "%"
アイデアは、コマンドの順序を変更することです。で始まり始めるのではなく、notify-send
ログファイルに最初に書きます。これはstdoutにもメッセージが送信されるためです。これにより、パイプする内容があります。 「要約が指定されていません」エラーを防ぐために使用してください。echo
tee
tee
notify-send
xargs
答え2
git pull
notify-send
ログファイルに書き込まずに出力をパイプで接続します。
git pull | xargs -I{} notify-send {}