我试过这样做:
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 命令。我怎样才能让它被执行,而不仅仅是打印它?
您可以将命令通过管道传输到 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)
但是请注意,所有这些代码生成命令在我看来都有些脆弱(一旦某些路径包含空格等,它们就会失败)。