不能在 xargs 中使用环境变量

Cannot use env variables in xargs

团队,我在执行 xargs 命令时看不到变量替换。任何提示,如何替换 $hostname?在我的系统上,主机名是一个命令,而不是 env 中定义的变量。但我也可以将它设置为变量..

hostname="$(hostname)"

ls -ltr /var/log/console.* | awk -F 'log/' '{print }' | xargs - 
l1 -- sh -c 'aws s3 cp /var/log/"" 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

您可以像传递文件名参数一样安全、轻松地将主机名作为位置参数传递:

hostname="$(hostname)"

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

这消除了将变量或文件名注入 shell 字符串的脆弱性。