不能在 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 字符串的脆弱性。
团队,我在执行 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 字符串的脆弱性。