86 lines
2.0 KiB
Bash
Executable File
86 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
META="/home/user/scripts/zfs_meta.data"
|
|
mkdir -p "$(dirname "$META")"
|
|
touch "$META"
|
|
|
|
get_value() {
|
|
local prop="$1"
|
|
local dataset="$2"
|
|
awk -v section="[$dataset]" -v key="$prop" '
|
|
$0 == section { in_section = 1; next }
|
|
in_section && $0 ~ /^\[/ { exit }
|
|
in_section && $0 ~ "^"key"=" {
|
|
print substr($0, index($0, "=") + 1)
|
|
exit
|
|
}
|
|
' "$META"
|
|
}
|
|
|
|
set_value() {
|
|
local prop="$1"
|
|
local value="$2"
|
|
local dataset="$3"
|
|
local tmp=$(mktemp)
|
|
|
|
awk -v section="[$dataset]" -v key="$prop" -v val="$value" '
|
|
BEGIN { in_section = 0; keyfound = 0 }
|
|
{
|
|
if ($0 == section) { in_section = 1 }
|
|
else if ($0 ~ /^\[/) { in_section = 0 }
|
|
|
|
if (in_section && $0 ~ "^"key"=") {
|
|
print key "=" val
|
|
keyfound = 1
|
|
next
|
|
}
|
|
print
|
|
}
|
|
END {
|
|
if (!keyfound) {
|
|
if (!in_section) print section
|
|
print key "=" val
|
|
}
|
|
}
|
|
' "$META" > "$tmp"
|
|
|
|
mv "$tmp" "$META"
|
|
}
|
|
|
|
list_names() {
|
|
grep "^\[" "$META" | tr -d '[]'
|
|
}
|
|
|
|
case "$1" in
|
|
get)
|
|
PROP="$2"
|
|
DATASET="$3"
|
|
VALUE=$(get_value "$PROP" "$DATASET")
|
|
VALUE=${VALUE:-"-"}
|
|
|
|
if [[ "$4" == "-o" && "$5" == "value" && "$6" == "-H" ]]; then
|
|
echo "$VALUE"
|
|
elif [[ "$4" == "-o" && "$5" == "value" ]]; then
|
|
echo "VALUE"
|
|
echo "$VALUE"
|
|
else
|
|
echo "NAME PROPERTY VALUE SOURCE"
|
|
printf "%-15s %-18s %-17s local\n" "$DATASET" "$PROP" "$VALUE"
|
|
fi
|
|
;;
|
|
set)
|
|
IFS="=" read PROP VALUE <<< "$2"
|
|
DATASET="$3"
|
|
set_value "$PROP" "$VALUE" "$DATASET"
|
|
;;
|
|
list)
|
|
if [[ "$2" == "-o" && "$3" == "name" ]]; then
|
|
list_names
|
|
fi
|
|
;;
|
|
*)
|
|
echo "fake-zfs.sh: unsupported command $1" >&2
|
|
exit 1
|
|
;;
|
|
esac
|