无法在xargs中使用环境变量

时间:2019-04-17 18:36:13

标签: bash sh xargs

团队,执行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 个答案:

答案 0 :(得分:2)

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

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"

这消除了将变量或文件名脆弱地注入到shell字符串中的情况。