Вы вызвали скрипт без передачи переменных среды, пожалуйста, запустите от имени sudo с ключом -E

Вот рабочая версия с использованием вашего подхода:

#!/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, чтобы действительно удалить файлы. Обратите внимание, что я не проверяю, различается ли количество файлов, так как в этом не было особого смысла, учитывая, что количество файлов может быть одинаковым, но у вас все еще могут быть файлы, имя которых отсутствует в списке.

0
17.12.2019, 02:48
2 ответа

Сценарий установки выводит это сообщение, когда переменная среды JAVA_HOMEне установлена ​​(строка 18 ). README расскажет вам, как вы должны это сделать. Вы либо не следовали этому руководству, либо оно работает в вашей системе по-другому; в последнем случае вы можете попробовать вместо этого установить переменную в ~/.profile, ~/.bashrcили ~/.bash_profile, в зависимости от того, что используется вашим дистрибутивом. Также может быть необходимо предварять строку export; по крайней мере, это не помешает:

export JAVA_HOME=/usr/lib/jvm/java-8-oracle
0
28.04.2021, 23:26

Ожидается некоторая переменная (s ). Вам нужно выяснить, какие именно переменные. Либо обратитесь к файлу readme, либо просто прочитайте сценарий. Как только вы узнаете, что переменная (s )должна быть установлена, попробуйте либо:

sudo VAR=value./install.sh

или

sudo./install.sh -E VAR=value

(или что-то в этом роде; возможно-E value).

-1
28.04.2021, 23:26

Теги

Похожие вопросы