echo 및 sed를 사용하여 생성된 쉘 명령을 실행하는 방법은 무엇입니까?

echo 및 sed를 사용하여 생성된 쉘 명령을 실행하는 방법은 무엇입니까?

나는 이것을 시도했습니다 :

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

이것은 배시 명령입니다. 그냥 인쇄하는 대신 어떻게 실행되도록 할 수 있나요?

답변1

명령을 셸에 파이프하여 실행할 수 있습니다.

echo "mv ..." | bash

또는 이를 쉘에 인수로 전달할 수 있습니다.

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

또는 내장된 bash를 사용할 수도 있습니다 eval.

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

그러나 이러한 모든 코드 생성 명령은 나에게 약간 취약해 보입니다(일부 경로에 공백이 포함되는 즉시 실패함).

답변2

기록 교체를 다시 구현하고 있습니다.

$ 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

답변3

이 작업은 다음을 통해 수행할 수도 있습니다 xargs.

echo "mv ..." | sed "..." | xargs command

예:

$ echo "whoareyou" | sed "s/areyou/ami/g" | xargs command

username
  • 그렇다면 &&다음이 필요합니다 eval.
$ echo "whoareyou && whoareyou" | sed "s/areyou/ami/g" | xargs command eval

username
username

실행된 명령을 인쇄할 수도 있습니다.

  • xargs -t
$ echo "whoareyou && whoareyou" | sed "s/areyou/ami/g" | xargs -t command eval

command eval whoami '&&' whoami
username
username
  • tee
echo "whoareyou && whoareyou" | sed "s/areyou/ami/g" | tee >(sh)

whoami && whoami
username
username

관련 정보