new: add leaf_add_shell and leaf_remove_shell
This commit is contained in:
40
leaf
40
leaf
@@ -607,4 +607,44 @@ leaf_unpack_package() {
|
|||||||
echo -e "${GREEN_COLOR}* Package ${PKG_PREFIX}/${PKG_NAME} has been installed${CLEAR_COLOR}\n"
|
echo -e "${GREEN_COLOR}* Package ${PKG_PREFIX}/${PKG_NAME} has been installed${CLEAR_COLOR}\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
leaf_add_shell() {
|
||||||
|
# usage: leaf_add_shell <abs_shell_path>
|
||||||
|
local shell="$1" f="/etc/shells" tmp
|
||||||
|
|
||||||
|
# ensure file exists
|
||||||
|
if [ ! -f "$f" ]; then
|
||||||
|
install -m 0644 -o root -g root /dev/null "$f" || return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# already present? (exact whole-line match)
|
||||||
|
grep -Fxq -- "$shell" "$f" && return 0
|
||||||
|
|
||||||
|
tmp="$(mktemp "${f}.leaf.XXXXXX")" || return 1
|
||||||
|
cat "$f" > "$tmp" || { rm -f "$tmp"; return 1; }
|
||||||
|
|
||||||
|
# append with newline
|
||||||
|
printf '%s\n' "$shell" >> "$tmp" || { rm -f "$tmp"; return 1; }
|
||||||
|
|
||||||
|
# atomic replace
|
||||||
|
install -m 0644 -o root -g root "$tmp" "$f" || { rm -f "$tmp"; return 1; }
|
||||||
|
rm -f "$tmp"
|
||||||
|
}
|
||||||
|
|
||||||
|
leaf_remove_shell() {
|
||||||
|
# usage: leaf_remove_shell <abs_shell_path>
|
||||||
|
local shell="$1" f="/etc/shells" tmp
|
||||||
|
|
||||||
|
[ -f "$f" ] || return 0
|
||||||
|
# if not present, nothing to do
|
||||||
|
grep -Fxq -- "$shell" "$f" || return 0
|
||||||
|
|
||||||
|
tmp="$(mktemp "${f}.leaf.XXXXXX")" || return 1
|
||||||
|
# delete exact matching lines only
|
||||||
|
grep -Fvx -- "$shell" "$f" > "$tmp" || true
|
||||||
|
|
||||||
|
install -m 0644 -o root -g root "$tmp" "$f" || { rm -f "$tmp"; return 1; }
|
||||||
|
rm -f "$tmp"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
main $@
|
main $@
|
||||||
|
|||||||
Reference in New Issue
Block a user