Skip to content

Commit cfc95c5

Browse files
committed
feat: add sudo privilege check at script startup for all shell variants
1 parent f91ccc8 commit cfc95c5

11 files changed

+136
-2
lines changed

scripts/update_packages.bbsh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
#!/bin/busybox sh
22

3+
# Request sudo privileges upfront
4+
echo "Requesting administrator privileges..."
5+
sudo -v || { echo "Failed to obtain administrator privileges. Exiting."; exit 1; }
6+
7+
# Keep sudo timestamp updated in the background
8+
(while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done) 2>/dev/null &
9+
310
# Use busybox built-ins where possible
411
alias echo='busybox echo'
512
alias grep='busybox grep'

scripts/update_packages.csh

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
#!/bin/csh -f
22

3+
# Request sudo privileges upfront
4+
echo "Requesting administrator privileges..."
5+
sudo -v
6+
if ($status != 0) then
7+
echo "Failed to obtain administrator privileges. Exiting."
8+
exit 1
9+
endif
10+
11+
# Keep sudo timestamp updated in the background
12+
( while (1)
13+
sudo -n true
14+
sleep 60
15+
kill -0 $$ >& /dev/null
16+
if ($status != 0) exit
17+
end ) >& /dev/null &
18+
319
# Error handling function
420
alias handle_error 'echo "Error updating $1: $2" > /dev/stderr'
521

scripts/update_packages.dash

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
#!/bin/dash
22

3+
# Request sudo privileges upfront
4+
echo "Requesting administrator privileges..."
5+
sudo -v || { echo "Failed to obtain administrator privileges. Exiting."; exit 1; }
6+
7+
# Keep sudo timestamp updated in the background
8+
(while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done) 2>/dev/null &
9+
310
# Error handling function
411
handle_error() {
512
echo "Error updating $1: $2" >&2

scripts/update_packages.elv

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
#!/usr/bin/env elvish
22

3+
# Request sudo privileges upfront
4+
echo "Requesting administrator privileges..."
5+
if (not (sudo -v)) {
6+
echo "Failed to obtain administrator privileges. Exiting." >&2
7+
exit 1
8+
}
9+
10+
# Keep sudo timestamp updated in the background
11+
go { while $true {
12+
sudo -n true
13+
sleep 60
14+
if (not (ps -p (pid) >/dev/null 2>&1)) {
15+
exit
16+
}
17+
} } &>/dev/null
18+
319
fn handle-error {|name msg|
420
echo "Error updating "$name": "$msg"" >&2
521
}

scripts/update_packages.fish

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
#!/usr/bin/env fish
22

3+
# Request sudo privileges upfront
4+
echo "Requesting administrator privileges..."
5+
if not sudo -v
6+
echo "Failed to obtain administrator privileges. Exiting." >&2
7+
exit 1
8+
end
9+
10+
# Keep sudo timestamp updated in the background
11+
begin
12+
while true
13+
sudo -n true
14+
sleep 60
15+
if not kill -0 %self
16+
exit
17+
end
18+
end
19+
end &>/dev/null &
20+
321
function handle_error
422
echo "Error updating $argv[1]: $argv[2]" >&2
523
end

scripts/update_packages.ksh

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
#!/usr/bin/env ksh
1+
#!/bin/ksh
2+
3+
# Request sudo privileges upfront
4+
echo "Requesting administrator privileges..."
5+
sudo -v || { echo "Failed to obtain administrator privileges. Exiting."; exit 1; }
6+
7+
# Keep sudo timestamp updated in the background
8+
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
29

310
function handle_error {
411
print -u2 "Error updating $1: $2"

scripts/update_packages.nu

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,24 @@
22
# vim: syntax=sh
33
# -*- mode: sh -*-
44

5+
# Request sudo privileges upfront
6+
echo "Requesting administrator privileges..."
7+
if (do { sudo -v } | complete).exit_code != 0 {
8+
echo "Failed to obtain administrator privileges. Exiting."
9+
exit 1
10+
}
11+
12+
# Keep sudo timestamp updated in the background
13+
do -bg {
14+
loop {
15+
sudo -n true
16+
sleep 60sec
17+
if (ps | where pid == $nu.pid | is-empty) {
18+
exit
19+
}
20+
}
21+
} | ignore
22+
523
def handle_error [name: string, msg: string] {
624
echo $"Error updating ($name): ($msg)"
725
}

scripts/update_packages.posix.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
#!/bin/sh
22

3+
# Request sudo privileges upfront
4+
echo "Requesting administrator privileges..."
5+
sudo -v || { echo "Failed to obtain administrator privileges. Exiting."; exit 1; }
6+
7+
# Keep sudo timestamp updated in the background
8+
(while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done) 2>/dev/null &
9+
310
echo "Starting package updates..."
411

512
# Helper function for command existence check

scripts/update_packages.sh

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
#!/usr/bin/env bash
1+
#!/bin/bash
2+
3+
# Request sudo privileges upfront
4+
echo "Requesting administrator privileges..."
5+
sudo -v || { echo "Failed to obtain administrator privileges. Exiting."; exit 1; }
6+
7+
# Keep sudo timestamp updated in the background
8+
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
29

310
echo "Starting package updates..."
411

scripts/update_packages.xsh

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,30 @@
11
#!/usr/bin/env xonsh
22

3+
import os
34
import sys
5+
import subprocess
6+
from threading import Thread
7+
import time
8+
9+
# Request sudo privileges upfront
10+
print("Requesting administrator privileges...")
11+
try:
12+
subprocess.run(['sudo', '-v'], check=True)
13+
except subprocess.CalledProcessError:
14+
print("Failed to obtain administrator privileges. Exiting.", file=sys.stderr)
15+
sys.exit(1)
16+
17+
# Keep sudo timestamp updated in the background
18+
def keep_sudo():
19+
while True:
20+
try:
21+
subprocess.run(['sudo', '-n', 'true'], check=False)
22+
time.sleep(60)
23+
os.kill(os.getpid(), 0)
24+
except:
25+
break
26+
27+
Thread(target=keep_sudo, daemon=True).start()
428

529
def handle_error(name, msg):
630
print(f"Error updating {name}: {msg}", file=sys.stderr)

scripts/update_packages.zsh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
# Update script for multiple package managers
44

5+
# Request sudo privileges upfront
6+
echo "Requesting administrator privileges..."
7+
sudo -v || { echo "Failed to obtain administrator privileges. Exiting."; exit 1; }
8+
9+
# Keep sudo timestamp updated in the background
10+
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
11+
512
echo "Starting package updates..."
613

714
# Update and upgrade Homebrew

0 commit comments

Comments
 (0)