バラより以下の回答zshソリューションの場合
~/.bash_aliases
システムを中断する前に、次のことを確認する必要があるとします。
function suspend()
{ #
echo "Please confirm/cancel system suspension:"
select confirmation in "confirm" "cancel"; do
case ${confirmation} in
confirm )
echo "System suspending..."
systemctl suspend
break;;
cancel )
echo "Canceled suspension."
break;;
esac
done
}
systemctl suspend
ユーザーが答えない場合は、実行を続けたいと思います。たとえば、10秒後にユーザー入力がない場合は、「confirm」ケースの内容が実行されます。
sleep
サブシェルで次のことを試しました。
function suspend()
{ #
flag_cancel=0
echo "Please confirm/cancel system suspension:"
(
sleep 10 &&
if [ $flag_cancel -eq 0 ]; then
echo "System suspending..."
systemctl suspend
fi &
)
select confirmation in "confirm" "cancel"; do
case ${confirmation} in
confirm )
echo "System suspending..."
systemctl suspend
break;;
cancel )
flag_cancel=1
echo "Canceled suspension."
break;;
esac
done
}
flag_cancel
ただし、値の変更は考慮されないため、コマンドは常に存在しますsleep
。
私が欲しいものを達成する方法は?
ベストアンサー1
read
実行時にユーザーから入力を受け取るには、コマンドを試してください。タイムアウトオプションがあるからです。
男性の場合:
-t timeout 入力の行全体をタイムアウト秒以内に読み取らないと、読み取りがタイムアウトし、戻りエラーが発生します。 timeout は、小数点の後に小数部がある 10 進数です。このオプションは、読み取りが端末、パイプ、またはその他の特殊ファイルから入力を読み取る場合にのみ有効です。通常のファイルから読み込むときは効果がありません。タイムアウトがゼロの場合、読み取りは指定されたファイル記述子から入力が可能な場合は成功を返し、そうでない場合は失敗を返します。タイムアウトを超えると、終了ステータスは128より大きくなります。