Bash

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

  • November 20, 2015

我試過做:

echo " mv /server/today/logfile1 /nfs/logs/ && gzip /nfs/logs/logfile1" | sed 's|logfile1|logfile2|g'

它列印:

mv /server/today/logfile2 /nfs/logs/ && gzip /nfs/logs/logfile2

這是一個 bash 命令。我怎樣才能讓它被執行,而不僅僅是列印它?

您可以將命令通過管道傳輸到 shell 中,以便執行:

echo "mv ..." | bash

或者你可以將它作為參數傳遞給 shell:

bash -c "$(echo "mv ...")"

或者您可以使用 bash 內置eval

eval "$(echo "mv ...")"

但是請注意,所有這些生成程式碼的命令對我來說都有些脆弱(一旦某些路徑包含空格等,它們就會失敗)。

您正在重新實現歷史替換。

$ mv /server/today/logfile1 /nfs/logs/ && gzip /nfs/logs/logfile1
$ !!:gs/logfile1/logfile2

如果您還沒有實際執行第一個命令,而只想執行一組類似的命令,請考慮一個循環:

for f in logfile logfile2; do
   mv /server/today/"$f" /nfs/logs && gzip /nfs/logs/"$f"
done

引用自:https://unix.stackexchange.com/questions/244372