团队,我在执行 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/' --
Run Code Online (Sandbox Code Playgroud)
输出
upload: ../var/log/console.68.log to s3://test-
bucket/dom0//console.68.log
Run Code Online (Sandbox Code Playgroud)
请观察上面的dom0//应该是
预期的
dom0/host-123/console.68.log
Run Code Online (Sandbox Code Playgroud)
您可以安全、轻松地将主机名作为位置参数传递,就像传递文件名参数一样:
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"
Run Code Online (Sandbox Code Playgroud)
这消除了将变量或文件名脆弱地注入到 shell 字符串中的情况。