.
This commit is contained in:
parent
8b807da346
commit
8c85fe8819
33
install.sh
33
install.sh
@ -11,39 +11,22 @@ NC='\033[0m' # No Color
|
||||
# Function to create directory with proper ownership
|
||||
mkdir_with_ownership() {
|
||||
local target_dir="$1"
|
||||
local current_dir="$target_dir"
|
||||
local parent_dir
|
||||
local owner
|
||||
local group
|
||||
local created_dirs=()
|
||||
|
||||
local parent_dir="$(dirname "$target_dir")"
|
||||
|
||||
# Find the lowest existing parent directory
|
||||
while [ ! -d "$current_dir" ] && [ "$current_dir" != "/" ]; do
|
||||
created_dirs+=("$current_dir")
|
||||
parent_dir="$(dirname "$current_dir")"
|
||||
current_dir="$parent_dir"
|
||||
while [ ! -d "$parent_dir" ] && [ "$parent_dir" != "/" ]; do
|
||||
parent_dir="$(dirname "$parent_dir")"
|
||||
done
|
||||
|
||||
# If we found an existing directory, get its ownership
|
||||
if [ -d "$current_dir" ]; then
|
||||
owner=$(stat -c %U "$current_dir")
|
||||
group=$(stat -c %G "$current_dir")
|
||||
if [ -d "$parent_dir" ]; then
|
||||
local owner=$(stat -c %U "$parent_dir")
|
||||
local group=$(stat -c %G "$parent_dir")
|
||||
install -d -o "$owner" -g "$group" "$target_dir"
|
||||
else
|
||||
echo -e "${RED}Error: Could not find any existing parent directory${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Create the directory and set ownership for all created directories
|
||||
if mkdir -p "$target_dir"; then
|
||||
# Set ownership for all created directories in reverse order
|
||||
for ((i=${#created_dirs[@]}-1; i>=0; i--)); do
|
||||
chown "$owner:$group" "${created_dirs[$i]}"
|
||||
done
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}Error: Failed to create directory $target_dir${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Check if USER_DEFINITIONS is provided
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user