Вам нужно быть более осторожным, если у вас есть имена файлов, содержащие пробелы. В этом случае используйте массив:
input_files=( "file with space."*.txt )
cat "${input_files[@]}" >> out_file.bak
Я нашел решение.
Оказывается, эта переменная имела в конце прикрепленную "\r".
Я решил эту проблему с помощью команды tr.
cmd=$( ssh -t some_server_name1 ' cd /opt/automation/repository/hosts/ ; out=$( ls -1tr | tail -n 1 ) ; sudo cp $out ~/ ; ls -1tr ~/ | tail -n 1 ' )
cmdv=$( echo "$cmd" | tr -d '\r' )
Похоже, что каталог /home/some _username/hosts.merged.1558094140821/ не существует или не имеет разрешений на чтение/выполнение для «some _username». Может быть хорошей идеей указать желаемое имя пользователя для scp, на случай, если на удаленном сервере осуществляется доступ не к тому пользователю.
Например:
scp -r remote_username@some_server_name1:~/"$cmdv".
Ваш скрипт извлечет вам имя последнего измененного файла из местоположения /opt/automation/repository/hosts/
на сервереsome_servername1
И когда вы выполняете scp
, вы игнорируете путь и выбираете имя файла.
Измените команду с
scp -r some_server_name1:~/"$cmdv"
-
scp -r some_server_name1:/opt/automation/repository/hosts/"$cmdv"
Надеюсь, это решит проблему.