Bash
如何執行使用 echo 和 sed 生成的 shell 命令?
我試過做:
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