aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rw-r--r--bin/.gitattributes1
-rwxr-xr-xbin/reboot-into-windows43
2 files changed, 44 insertions, 0 deletions
diff --git a/bin/.gitattributes b/bin/.gitattributes
new file mode 100644
index 0000000..c9f8ef4
--- /dev/null
+++ b/bin/.gitattributes
@@ -0,0 +1 @@
+reboot-into-windows text eol=lf
diff --git a/bin/reboot-into-windows b/bin/reboot-into-windows
new file mode 100755
index 0000000..a6584b9
--- /dev/null
+++ b/bin/reboot-into-windows
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+
+set -o errexit -o nounset -o pipefail
+shopt -s inherit_errexit lastpipe
+
+readonly cfg_path=/boot/grub/grub.cfg
+
+get_windows_menu_entry() {
+ local windows_entries
+ windows_entries="$( awk -F\' '/menuentry / {print $2}' "$cfg_path" | grep -Fi Windows )"
+
+ local numof_entries
+ numof_entries="$( echo "$windows_entries" | wc -l )"
+
+ if [ "$numof_entries" -ne 1 ]; then
+ echo "Don't know which one of the following entries to select:" >&2
+ echo "$windows_entries" >&2
+ return 1
+ fi
+
+ echo "$windows_entries"
+}
+
+main() {
+ local entry
+ entry="$( get_windows_menu_entry )"
+
+ # grub-reboot returns 0 even if something like a permission error happens.
+ # It does print something in that case though, and nothing after a
+ # successful termination.
+ local output
+ output="$( grub-reboot "$entry" )"
+
+ if [ -n "$output" ]; then
+ echo "grub-reboot probably exited with an error:" >&2
+ echo "$output" >&2
+ return 1
+ fi
+
+ reboot
+}
+
+main