awk 명령에 별칭을 사용하는 중에 오류가 발생했습니다.

awk 명령에 별칭을 사용하는 중에 오류가 발생했습니다.

이 별칭을 .zshrc에 추가하려고 시도했지만 오류가 발생했습니다. ==, " 및 && 값을 이스케이프 처리하려고 시도했지만 여전히 성공하지 못했습니다. 무엇을 놓치고 있나요?

alias broke="ssh -t [email protected] tail -f documents/dir/`date -u +%Y%m%d`.log | awk '$2=="ABC:" && int($5)>=26 || int($5)<=-26'"

답변1

  1. date별칭이 작은따옴표 대신 큰따옴표를 사용하여 정의되었기 때문에 명령 대체를 조기에 수행했습니다.한정된, 전화할 때가 아닙니다.
  2. 쉘은 awk필드 참조를 쉘 위치 인수로 해석하고
  3. 확장하고 있어요별칭이 정의된 경우;
  4. awk주변의 큰따옴표는 전혀 표시되지 않으므로 설정되지 않은 변수 (예: 빈 문자열) ABC:로 해석되고 예상치 못한 위치에 따옴표가 없는 콜론이 따라오며 오류가 발생할 수 있습니다 .awkABCawk
  5. 추가 조언으로, 내부 인용 규칙이 더 직관적이기 때문에 실제로 $(...)대신 사용해야 합니다 .`...`

명령 대체 및 특수 문자가 포함된 별칭을 설정하려면 작은따옴표를 사용해야 합니다. 실제로 별칭을 사용할 때는 매개변수 확장을 원하지 않습니다.놓다호출될 때가 아니라.

작은 따옴표 안에 작은 따옴표를 포함할 수는 없지만 따옴표 자체는 구분 기호가 아니기 때문에 문제가 되지 않습니다.

alias hassinglequotesembedded='echo "It'\''s not really too hard; current date when the alias is executed is $(date)"; echo '"'but the alias was set at $(date)'"

참조 유형에 대해 Stack Overflow에서 추가 내용을 읽어볼 것을 적극 권장합니다.

답변2

이 작업을 자주 실행하고 별칭이 필요한 경우 다음을 수행하면 거의 확실히 더 나을 것입니다.

  1. 쉘 스크립트로 작성하십시오. 중첩된 따옴표로 인해 길을 잃을 가능성이 훨씬 적습니다.

  2. scp/usr/local/bin원격 서버(또는 경로의 다른 곳) 로 . 아니면 그냥 거기에 먼저 쓰세요. 실행 가능하게 만들려면 을 사용하는 것을 잊지 마세요 chmod.

  3. ssh필요할 때 스크립트를 실행하기만 하면 됩니다. . 필요한 경우 별칭에 넣을 수도 있습니다.ssh -t [email protected] myscript

    alias broke='ssh -t [email protected] myscript'

그런데 $()대신 백틱을 사용하세요. $()읽기 쉽고, 문제 없이 중첩하기 쉬우며, 작은따옴표와 혼동될 가능성이 줄어듭니다.

답변3

나에게 그것은 $문자를 탈출해야 하는 것만큼 간단 하다

작동 안함:

alias trim="awk '{$1=$1};1';"

해결책:

alias trim="awk '{\$1=\$1};1';"

관련 정보