This commit is contained in:
Your Name
2025-04-21 10:33:38 +12:00
parent 8b807da346
commit 8c85fe8819
3 changed files with 57 additions and 27 deletions

View File

@ -7,7 +7,7 @@ _dropshell_completions() {
prev="${COMP_WORDS[COMP_CWORD-1]}"
# List of main commands
opts="help version status"
opts="help version status servers"
# If we're completing the first argument, show all commands
if [[ ${COMP_CWORD} -eq 1 ]] ; then
@ -21,6 +21,22 @@ _dropshell_completions() {
# No additional completions for status
COMPREPLY=()
;;
servers)
# List servers from _server.env files
local servers_dir="/opt/dropshell/user/servers"
local servers=()
# Read all _server.env files
for server_file in "$servers_dir"/*/_server.env; do
if [ -f "$server_file" ]; then
local server_name=$(basename "$(dirname "$server_file")")
servers+=("$server_name")
fi
done
COMPREPLY=( $(compgen -W "${servers[@]}" -- ${cur}) )
return 0
;;
*)
;;
esac

View File

@ -60,9 +60,40 @@ check_status() {
df -h /
}
# Function to list servers
# Function to list servers from _server.env files
list_servers() {
local servers_dir="/opt/dropshell/user/servers"
local max_name_len=0
local max_addr_len=0
local servers=()
# First pass: collect data and find max lengths
for server_dir in "$servers_dir"/*/; do
if [ -f "${server_dir}_server.env" ]; then
local server_name=$(basename "$server_dir")
local ssh_address=$(grep '^SSH_ADDRESS=' "${server_dir}_server.env" | cut -d'=' -f2-)
# Update max lengths
[ ${#server_name} -gt $max_name_len ] && max_name_len=${#server_name}
[ ${#ssh_address} -gt $max_addr_len ] && max_addr_len=${#ssh_address}
servers+=("$server_name|$ssh_address")
fi
done
# Add padding for headers
max_name_len=$((max_name_len > 4 ? max_name_len : 4))
max_addr_len=$((max_addr_len > 7 ? max_addr_len : 7))
# Print header
printf "%-${max_name_len}s | %-${max_addr_len}s\n" "Name" "Address"
printf "%-${max_name_len}s-+-%-${max_addr_len}s\n" "$(printf '%*s' $max_name_len '' | tr ' ' '-')" "$(printf '%*s' $max_addr_len '' | tr ' ' '-')"
# Print server rows
for server in "${servers[@]}"; do
IFS='|' read -r name addr <<< "$server"
printf "%-${max_name_len}s | %-${max_addr_len}s\n" "$name" "$addr"
done
}
# Main script logic