$alive
次のエラーが表示されるようにすると、スクリプトが変数を必須整数に設定するだけの問題が発生しました。uptime: /dev/ttys001: No such file or directory
以下のコンテキストでは、後で&>/dev/null
コマンドを追加して削除してみました。uptime
(( uptime | grep -ohe 'up .*' | sed 's/,//g' | awk '{ print $2 }')&>/dev/null)
または
( uptime &>/dev/null | grep -ohe 'up .*' | sed 's/,//g' | awk '{ print $2 }')
ただし、これにより次のような状況が発生します。
This computer has been awake for days
そして変数を設定し、次のように実行する必要があります。
This computer has been awake for 32 days
これは、MacOSでbashを使用したスクリプトについて学ぶための個人的なプロジェクトに近いです。したがって、追加の洞察力をいただきありがとうございます!
これはコンテキストによるスクリプトです。コンピュータにリモートでアクセスできるように無限ループとして設計されており、実行中のプロセスをシャットダウンして停止できます。
#!/bin/bash
alive=$( uptime | grep -ohe 'up .*' | sed 's/,//g' | awk '{ print $2 }')
until [[ $alive -lt 0 ]]; do
Caffeinate -d -t 2
sleep 2
echo "This computer has been awake for $alive days"
done
最終的には、コンピュータが特定の日数に達した後、中断して再起動し、自動的にログインしてからプロセスを再起動して、コンピュータが数ヶ月間目を覚まし、パフォーマンスが低下しないようにしたいと思います。
しかし、まだ時間がありませんでした;)
答え1
uptime
stderr出力を削除する必要があります。
alive=$( uptime 2>/dev/null | grep -ohe 'up .*' | sed 's/,//g' | awk '{ print $2 }')
&>/dev/null
標準出力と標準エラーをビットバケットにリダイレクトすると、次のようになります。いいえ処理する出力で、変数は空の文字列に設定されます。2>/dev/null
標準エラーのみをリダイレクトしてエラーメッセージを削除し、通常の出力はそのままにします。
参考までに、すべての操作awk
を実行できます。あなたのシステムから正確な出力がわかりませんが、私のシステムでは次のように動作します。grep
sed
uptime
alive=$(uptime 2>/dev/null | awk '/up/ { print $3 }')