Невозможно использовать переменные env в xargs - PullRequest
1 голос
/ 17 апреля 2019

Команда, я не вижу подстановки переменных при выполнении команды xargs. Любой намек, как заменить $ hostname? в моей системе имя хоста - это команда, а не переменная, определенная в env. Но я также могу установить переменную ..

hostname="$(hostname)"

ls -ltr /var/log/console.* | awk -F 'log/' '{print $2}' | xargs - 
l1 -- sh -c 'aws s3 cp /var/log/"$1" s3://test- 
bucket/dom0/$hostname/' --

выход

upload: ../var/log/console.68.log to s3://test- 
bucket/dom0//console.68.log

Пожалуйста, обратите внимание на dom0 // выше должно быть

ожидается

dom0/host-123/console.68.log

1 Ответ

3 голосов
/ 17 апреля 2019

Вы можете безопасно и легко передать имя хоста как позиционный параметр так же, как передаете аргумент имени файла:

hostname="$(hostname)"

ls -ltr /var/log/console.* | awk -F 'log/' '{print $2}' | xargs - 
l1 -- sh -c 'aws s3 cp "/var/log/$2" "s3://test-bucket/dom0/$1/"' -- "$hostname"

Это устраняет хрупкое внедрение переменных или имен файлов в строку оболочки.

...