团队,执行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
答案 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字符串中的情况。