Имя пути в сценарии оболочки содержит дополнительные символы при запуске сценария [закрыто]

Когда вы выполняете задание, правая часть считается цитируемой:

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"

1
14.08.2017, 09:19
1 ответ

Предложение Archemar заменить %20 пробелом и использовать двойные кавычки вокруг строки пути решило мою проблему и привело к правильному открытию папки.

1
27.01.2020, 23:45

Теги

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