Вот рабочая версия с использованием вашего подхода:
#!/bin/bash
fileList="$1"
targetDir="$2"
## Read the list of files into an associative array
declare -A filesInFile
while IFS= read -r file; do
filesInFile["$file"]=1
done < "$fileList"
## Collect the files in the target dir
filesInDir=("$targetDir"/*);
for file in "${filesInDir[@]}"; do
file=${file##*/}; # get the name of the file; remove path
## If this file has no entry in the array, delete
if [[ -z "${filesInFile[$file]}" ]]; then
echo "rm $file"
fi
done
Удалите echo
, чтобы действительно удалить файлы. Обратите внимание, что я не проверяю, различается ли количество файлов, так как в этом не было особого смысла, учитывая, что количество файлов может быть одинаковым, но у вас все еще могут быть файлы, имя которых отсутствует в списке.
Сценарий установки выводит это сообщение, когда переменная среды JAVA_HOME
не установлена (строка 18 ). README расскажет вам, как вы должны это сделать. Вы либо не следовали этому руководству, либо оно работает в вашей системе по-другому; в последнем случае вы можете попробовать вместо этого установить переменную в ~/.profile
, ~/.bashrc
или ~/.bash_profile
, в зависимости от того, что используется вашим дистрибутивом. Также может быть необходимо предварять строку export
; по крайней мере, это не помешает:
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
Ожидается некоторая переменная (s ). Вам нужно выяснить, какие именно переменные. Либо обратитесь к файлу readme, либо просто прочитайте сценарий. Как только вы узнаете, что переменная (s )должна быть установлена, попробуйте либо:
sudo VAR=value./install.sh
или
sudo./install.sh -E VAR=value
(или что-то в этом роде; возможно-E value
).