No debería perder archivos si el núcleo funciona correctamente. Deman 5 proc
:
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries, and inodes from memory, causing that memory to become
free...
...
Because writing to this file is a nondestructive operation and
dirty objects are not freeable, the user should run sync(1)
first.
Como indica el manual, solo se vacían las cachés limpias y escribir cualquier cosa en drop_caches
es una operación no destructiva. Los objetos sucios no se molestan en absoluto.
У вас опечатка в имени переменной.
Это:
choosenFile=${allFilesinDirectory[randomNumber]}
Должно быть:
choosenFile=${allFilesInDirectory[randomNumber]}
На самом деле, для хорошей практики вы должны двойные -цитировать свои переменные, когда вы их используете. Это делается для того, чтобы пробелы в значениях не оценивались оболочкой, когда вы меньше всего этого ожидаете. Так что правильная строка должна быть такой:
choosenFile="${allFilesInDirectory[randomNumber]}"
Я бы настоятельно рекомендовал вам использоватьhttps://www.shellcheck.net/для проверки сценариев оболочки. Как это бывает, он уловил бы вашу опечатку и предупредил бы вас об этом.
Что касается второй части вашего вопроса, просто перестаньте дважды -цитировать всю строку. Напишите команду и укажите ссылку на переменную там, где она вам нужна, например, вот так:
sudo openvpn "$choosenFile"