Когда вы выполняете задание, правая часть считается цитируемой:
n_name=$h_name"_"$time_stamp"_*.nmon"
Следовательно, звездочка ( *
) будет включена дословно в переменной.
Он не будет разворачиваться, как это обычно бывает со звездочками в путях.
Поскольку вероятно, что у вас нет файла со звездочкой в каталоге, файл не найден, и ls
выдает ошибку.
Кроме того, если вы хотите, чтобы расширение звездочек работало, это должно быть сделано в каталоге, в котором должен быть найден файл:
a_dir=/dir_to_file
n_name=$(echo "${a_dir}/${h_name}_${time_stamp}_"*".nmon")
n_dir="/var/log/nmon_data"
cd "$n_dir"
И было бы очень хорошей идеей использовать параметр оболочки nullglob
:
shopt -s nullglob
, чтобы избежать сохранения *
, если нет файла с таким именем.
Или, что еще лучше, использовать опцию failglob
:
shopt -s failglob
Для выдачи явной ошибки, когда файл не найден.
a_dir=/dir_to_file
n_name=$(shopt -s failglob; echo "$a_dir/${h_name}_${time_stamp}_"*".nmon")
(( $? )) && exit 1
Отрегулируйте значение "$ n_dir" в соответствии с вашими потребностями (это не ясно из вашего описания проблемы).
И, пожалуйста: цитируйте ваши расширения по умолчанию, например: ls -al "$ n_name"
Предложение Archemar заменить %20 пробелом и использовать двойные кавычки вокруг строки пути решило мою проблему и привело к правильному открытию папки.