Merge pull request #71 from outis1one/claude/zealous-feynman-odDrh
tools: add edit mount option to mount-network-drive.sh
This commit is contained in:
@@ -208,6 +208,128 @@ _do_mount() {
|
|||||||
ok "Done. $share is mounted at $mount_point"
|
ok "Done. $share is mounted at $mount_point"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ── Edit a mount ─────────────────────────────────────────────────────────────
|
||||||
|
edit_mount() {
|
||||||
|
echo ""
|
||||||
|
local entries=()
|
||||||
|
while IFS= read -r line; do
|
||||||
|
[[ -z "$line" || "$line" == \#* ]] && continue
|
||||||
|
entries+=("$line")
|
||||||
|
done < <(grep -E '\bcifs\b|\bnfs\b' /etc/fstab 2>/dev/null || true)
|
||||||
|
|
||||||
|
if [[ ${#entries[@]} -eq 0 ]]; then
|
||||||
|
warn "No network mounts found in /etc/fstab."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Network mounts in /etc/fstab:"
|
||||||
|
echo ""
|
||||||
|
local i=1
|
||||||
|
for e in "${entries[@]}"; do
|
||||||
|
local mp; mp=$(echo "$e" | awk '{print $2}')
|
||||||
|
local src; src=$(echo "$e" | awk '{print $1}')
|
||||||
|
printf " %2d) %-30s %s\n" "$i" "$src" "$mp"
|
||||||
|
i=$(( i + 1 ))
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
local choice=""
|
||||||
|
read -r -p " Edit entry number [cancel]: " choice
|
||||||
|
[[ -z "$choice" || ! "$choice" =~ ^[0-9]+$ ]] && { info "Cancelled."; return 0; }
|
||||||
|
|
||||||
|
local idx=$(( choice - 1 ))
|
||||||
|
[[ "$idx" -lt 0 || "$idx" -ge ${#entries[@]} ]] && { warn "Invalid selection."; return 0; }
|
||||||
|
|
||||||
|
local target_entry="${entries[$idx]}"
|
||||||
|
local target_src; target_src=$(echo "$target_entry" | awk '{print $1}')
|
||||||
|
local target_mp; target_mp=$(echo "$target_entry" | awk '{print $2}')
|
||||||
|
local target_fs; target_fs=$(echo "$target_entry" | awk '{print $3}')
|
||||||
|
local target_opts; target_opts=$(echo "$target_entry" | awk '{print $4}')
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo " Current values:"
|
||||||
|
printf " Share : %s\n" "$target_src"
|
||||||
|
printf " Mount point: %s\n" "$target_mp"
|
||||||
|
printf " Type : %s\n" "$target_fs"
|
||||||
|
printf " Options : %s\n" "$target_opts"
|
||||||
|
echo ""
|
||||||
|
echo " Press Enter to keep the current value."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Share path
|
||||||
|
local new_src=""
|
||||||
|
read -r -p " Share path [$target_src]: " new_src
|
||||||
|
new_src="${new_src:-$target_src}"
|
||||||
|
|
||||||
|
# Mount point
|
||||||
|
local new_mp=""
|
||||||
|
read -r -p " Mount point [$target_mp]: " new_mp
|
||||||
|
new_mp="${new_mp:-$target_mp}"
|
||||||
|
|
||||||
|
# Options — offer guided or raw edit
|
||||||
|
echo ""
|
||||||
|
echo " Options — edit raw fstab options string, or press Enter to keep."
|
||||||
|
local new_opts=""
|
||||||
|
read -r -p " Options [$target_opts]: " new_opts
|
||||||
|
new_opts="${new_opts:-$target_opts}"
|
||||||
|
|
||||||
|
# Credentials update (CIFS only)
|
||||||
|
local creds_file="/etc/samba/credentials.$(echo "$target_src" | sed 's|[^a-zA-Z0-9]|_|g')"
|
||||||
|
if [[ "$target_fs" == "cifs" && -f "$creds_file" ]]; then
|
||||||
|
echo ""
|
||||||
|
local update_creds=""
|
||||||
|
read -r -p " Update credentials (username/password)? [y/N]: " update_creds
|
||||||
|
if [[ "${update_creds,,}" == "y" ]]; then
|
||||||
|
local smb_user="" smb_pass="" smb_domain=""
|
||||||
|
read -r -p " Username: " smb_user
|
||||||
|
read -r -s -p " Password: " smb_pass; echo ""
|
||||||
|
read -r -p " Domain (leave blank if none): " smb_domain
|
||||||
|
local bk_creds="${creds_file}.backup.$(date +%Y%m%d-%H%M%S)"
|
||||||
|
cp "$creds_file" "$bk_creds"
|
||||||
|
cat > "$creds_file" << CREDS
|
||||||
|
username=${smb_user}
|
||||||
|
password=${smb_pass}
|
||||||
|
${smb_domain:+domain=${smb_domain}}
|
||||||
|
CREDS
|
||||||
|
chmod 600 "$creds_file"
|
||||||
|
chown root:root "$creds_file"
|
||||||
|
ok "Credentials updated (old saved to $(basename "$bk_creds"))"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Write changes
|
||||||
|
local bk="/etc/fstab.backup.$(date +%Y%m%d-%H%M%S)"
|
||||||
|
cp /etc/fstab "$bk"
|
||||||
|
info "Backed up /etc/fstab → $bk"
|
||||||
|
|
||||||
|
# Replace the old line with the new one
|
||||||
|
local new_line
|
||||||
|
new_line=$(printf '%-40s %-25s %-6s %s 0 0' "$new_src" "$new_mp" "$target_fs" "$new_opts")
|
||||||
|
# Escape for sed
|
||||||
|
local escaped_old escaped_new
|
||||||
|
escaped_old=$(printf '%s\n' "$target_entry" | sed 's/[[\.*^$()+?{|]/\\&/g')
|
||||||
|
escaped_new=$(printf '%s\n' "$new_line" | sed 's/[[\.*^$()+?{|]/\\&/g; s|/|\\/|g')
|
||||||
|
sed -i "s|${escaped_old}|${new_line}|" /etc/fstab
|
||||||
|
ok "fstab updated"
|
||||||
|
|
||||||
|
# Remount if mount point changed or options changed
|
||||||
|
if mountpoint -q "$target_mp" 2>/dev/null; then
|
||||||
|
echo ""
|
||||||
|
local remount=""
|
||||||
|
read -r -p " Remount now to apply changes? [Y/n]: " remount
|
||||||
|
if [[ "${remount,,}" != "n" ]]; then
|
||||||
|
umount "$target_mp" 2>/dev/null || warn "Could not unmount cleanly — may still be in use"
|
||||||
|
[[ "$new_mp" != "$target_mp" ]] && mkdir -p "$new_mp"
|
||||||
|
if mount -t "$target_fs" -o "$new_opts" "$new_src" "$new_mp"; then
|
||||||
|
ok "Remounted at $new_mp"
|
||||||
|
else
|
||||||
|
err "Remount failed — check options and connectivity."
|
||||||
|
info "Manual retry: sudo mount -t $target_fs -o $new_opts $new_src $new_mp"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# ── Remove a mount ────────────────────────────────────────────────────────────
|
# ── Remove a mount ────────────────────────────────────────────────────────────
|
||||||
remove_mount() {
|
remove_mount() {
|
||||||
echo ""
|
echo ""
|
||||||
@@ -302,7 +424,8 @@ main() {
|
|||||||
echo " 1) Mount an SMB/CIFS share (Windows, Samba, NAS)"
|
echo " 1) Mount an SMB/CIFS share (Windows, Samba, NAS)"
|
||||||
echo " 2) Mount an NFS share"
|
echo " 2) Mount an NFS share"
|
||||||
echo " 3) Show current network mounts"
|
echo " 3) Show current network mounts"
|
||||||
echo " 4) Remove a mount"
|
echo " 4) Edit a mount"
|
||||||
|
echo " 5) Remove a mount"
|
||||||
echo " 0) Quit"
|
echo " 0) Quit"
|
||||||
echo ""
|
echo ""
|
||||||
read -r -p " Choice [1]: " action
|
read -r -p " Choice [1]: " action
|
||||||
@@ -313,7 +436,8 @@ main() {
|
|||||||
1) mount_smb ;;
|
1) mount_smb ;;
|
||||||
2) mount_nfs ;;
|
2) mount_nfs ;;
|
||||||
3) show_mounts ;;
|
3) show_mounts ;;
|
||||||
4) remove_mount ;;
|
4) edit_mount ;;
|
||||||
|
5) remove_mount ;;
|
||||||
0|q|Q) break ;;
|
0|q|Q) break ;;
|
||||||
*) warn "Invalid choice." ;;
|
*) warn "Invalid choice." ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user