如何执行使用 echo 和 sed 生成的 shell 命令?

rɑː*_*dʒɑ 4 bash sed command

我试过这样做:

echo " mv /server/today/logfile1 /nfs/logs/ && gzip /nfs/logs/logfile1" | sed 's|logfile1|logfile2|g'
Run Code Online (Sandbox Code Playgroud)

它打印:

mv /server/today/logfile2 /nfs/logs/ && gzip /nfs/logs/logfile2
Run Code Online (Sandbox Code Playgroud)

这是一个 bash 命令。我怎样才能让它被执行,而不仅仅是打印它?

dha*_*hag 8

您可以将命令通过管道传输到 shell 中,以便执行:

echo "mv ..." | bash
Run Code Online (Sandbox Code Playgroud)

或者您可以将其作为参数传递给 shell:

bash -c "$(echo "mv ...")"
Run Code Online (Sandbox Code Playgroud)

或者您可以使用内置的 bash eval

eval "$(echo "mv ...")"
Run Code Online (Sandbox Code Playgroud)

但是请注意,所有这些代码生成命令在我看来都有些脆弱(一旦某些路径包含空格等,它们就会失败)。