switched to a tmp file to remove packages and directories
This commit is contained in:
98
uninstall.sh
98
uninstall.sh
@@ -45,6 +45,39 @@ if [ $? -eq 1 ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Function to remove selected packages
|
||||||
|
remove_packages() {
|
||||||
|
local selected_packages_file=$1
|
||||||
|
while read -r package; do
|
||||||
|
if pacman -Qi "$package" &> /dev/null; then
|
||||||
|
echo "Removing package: $package"
|
||||||
|
if ! sudo pacman -Rsc --noconfirm "$package"; then
|
||||||
|
echo "$ERROR Failed to remove package: $package"
|
||||||
|
else
|
||||||
|
echo "$OK Successfully removed package: $package"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$INFO Package ${YELLOW}$package${RESET} not found. Skipping."
|
||||||
|
fi
|
||||||
|
done < "$selected_packages_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to remove selected directories
|
||||||
|
remove_directories() {
|
||||||
|
local selected_dirs_file=$1
|
||||||
|
while read -r dir; do
|
||||||
|
if [ -d "$HOME/.config/$dir" ]; then
|
||||||
|
echo "Removing directory: $HOME/.config/$dir"
|
||||||
|
if ! rm -rf "$HOME/.config/$dir"; then
|
||||||
|
echo "$ERROR Failed to remove directory: $HOME/.config/$dir"
|
||||||
|
else
|
||||||
|
echo "$OK Successfully removed directory: $HOME/.config/$dir"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$INFO Directory ${YELLOW}$HOME/.config/$dir${RESET} not found. Skipping."
|
||||||
|
fi
|
||||||
|
done < "$selected_dirs_file"
|
||||||
|
}
|
||||||
|
|
||||||
# Define the list of packages to choose from (with options_command tags)
|
# Define the list of packages to choose from (with options_command tags)
|
||||||
packages=(
|
packages=(
|
||||||
@@ -127,7 +160,7 @@ while true; do
|
|||||||
|
|
||||||
# Check if the user canceled the operation
|
# Check if the user canceled the operation
|
||||||
if [ $? -eq 1 ]; then
|
if [ $? -eq 1 ]; then
|
||||||
echo "$INFO uninstall process canceled."
|
echo "Operation canceled."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -135,10 +168,9 @@ while true; do
|
|||||||
if [[ -z "$package_choices" ]]; then
|
if [[ -z "$package_choices" ]]; then
|
||||||
echo "$NOTE No packages selected. Please select at least one package."
|
echo "$NOTE No packages selected. Please select at least one package."
|
||||||
else
|
else
|
||||||
# Convert the selected package list into an array and clean up quotes
|
# Save the selected package list to a temporary file
|
||||||
IFS=" " read -r -a selected_packages <<< "$package_choices"
|
echo "$package_choices" | tr -d '"' > /tmp/selected_packages.txt
|
||||||
selected_packages=($(echo "${selected_packages[@]}" | tr -d '"'))
|
echo "Packages to remove: $package_choices"
|
||||||
echo "Packages to remove: ${selected_packages[@]}"
|
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -159,10 +191,9 @@ while true; do
|
|||||||
if [[ -z "$dir_choices" ]]; then
|
if [[ -z "$dir_choices" ]]; then
|
||||||
echo "$NOTE No directories selected. Please select at least one directory."
|
echo "$NOTE No directories selected. Please select at least one directory."
|
||||||
else
|
else
|
||||||
# Convert the selected directories list into an array and clean up quotes
|
# Save the selected directories list to a temporary file
|
||||||
IFS=" " read -r -a selected_dirs <<< "$dir_choices"
|
echo "$dir_choices" | tr -d '"' > /tmp/selected_directories.txt
|
||||||
selected_dirs=($(echo "${selected_dirs[@]}" | tr -d '"'))
|
echo "Directories to remove: $dir_choices"
|
||||||
echo "Directories to remove: ${selected_dirs[@]}"
|
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -183,59 +214,20 @@ if ! whiptail --title "Final Confirmation" --yesno \
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Function to remove selected packages
|
|
||||||
remove_packages() {
|
|
||||||
local selected_packages=($1)
|
|
||||||
for package in "${selected_packages[@]}"; do
|
|
||||||
package=$(echo "$package" | tr -d '"') # Remove extra quotes
|
|
||||||
if pacman -Qi "$package" &> /dev/null; then
|
|
||||||
echo "Removing package: $package"
|
|
||||||
if ! sudo pacman -Rsc --noconfirm "$package"; then
|
|
||||||
echo "$ERROR Failed to remove package: $package"
|
|
||||||
else
|
|
||||||
echo "$OK Successfully removed package: $package"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "$INFO Package ${YELLOW}$package${RESET} not found. Skipping."
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to remove selected directories
|
|
||||||
remove_directories() {
|
|
||||||
local selected_dirs=($1)
|
|
||||||
for dir in "${selected_dirs[@]}"; do
|
|
||||||
dir=$(echo "$dir" | tr -d '"') # Remove extra quotes
|
|
||||||
if [ -d "$HOME/.config/$dir" ]; then
|
|
||||||
echo "Removing directory: $HOME/.config/$dir"
|
|
||||||
if ! rm -rf "$HOME/.config/$dir"; then
|
|
||||||
echo "$ERROR Failed to remove directory: $HOME/.config/$dir"
|
|
||||||
else
|
|
||||||
echo "$OK Successfully removed directory: $HOME/.config/$dir"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "$INFO Directory ${YELLOW}$HOME/.config/$dir${RESET} not found. Skipping."
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# Loop to attempt removing packages multiple times
|
# Loop to attempt removing packages multiple times
|
||||||
MAX_ATTEMPTS=2
|
MAX_ATTEMPTS=2
|
||||||
ATTEMPT=0
|
ATTEMPT=0
|
||||||
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
|
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
|
||||||
# Remove packages
|
# Remove packages
|
||||||
if [ ${#selected_packages[@]} -gt 0 ]; then
|
remove_packages /tmp/selected_packages.txt
|
||||||
remove_packages "${selected_packages[@]}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if any packages still need to be removed, retry if needed
|
# Check if any packages still need to be removed, retry if needed
|
||||||
MISSING_PACKAGE_COUNT=0
|
MISSING_PACKAGE_COUNT=0
|
||||||
for package in "${selected_packages[@]}"; do
|
while read -r package; do
|
||||||
package=$(echo "$package" | tr -d '"') # Clean extra quotes
|
|
||||||
if pacman -Qi "$package" &> /dev/null; then
|
if pacman -Qi "$package" &> /dev/null; then
|
||||||
MISSING_PACKAGE_COUNT=$((MISSING_PACKAGE_COUNT + 1))
|
MISSING_PACKAGE_COUNT=$((MISSING_PACKAGE_COUNT + 1))
|
||||||
fi
|
fi
|
||||||
done
|
done < /tmp/selected_packages.txt
|
||||||
|
|
||||||
if [ $MISSING_PACKAGE_COUNT -gt 0 ]; then
|
if [ $MISSING_PACKAGE_COUNT -gt 0 ]; then
|
||||||
ATTEMPT=$((ATTEMPT + 1))
|
ATTEMPT=$((ATTEMPT + 1))
|
||||||
@@ -246,8 +238,6 @@ while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
# Proceed to removing directories
|
# Proceed to removing directories
|
||||||
if [ ${#selected_dirs[@]} -gt 0 ]; then
|
remove_directories /tmp/selected_directories.txt
|
||||||
remove_directories "${selected_dirs[@]}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$INFO Uninstall process completed."
|
echo "$INFO Uninstall process completed."
|
||||||
|
|||||||
Reference in New Issue
Block a user