bash 함수를 csh 별칭으로 변환하는 중 오류가 발생했습니다.

bash 함수를 csh 별칭으로 변환하는 중 오류가 발생했습니다.

csh에서 다음 bash 함수를 사용할 수 있도록 csh 별칭을 작성하고 있습니다.

function up( )
{
    LIMIT=$1
    P=$PWD
    for ((i=1; i <= LIMIT; i++))
    do
        P=$P/..
    done
    cd $P
    export MPWD=$P
}

(나는 위의 bash 기능을 훔쳤습니다.여기)

나는 이것을 썼다:

alias up 'set LIMIT=$1; set P=$PWD; set counter = LIMIT;  while[counter!=0] set counter = counter-1; P=$P/.. ; end cd $P; setenv MPWD=$P'

그러나 다음과 같은 오류가 발생합니다.

while[counter!=0]: No match.
P=/net/devstorage/home/rghosh/..: Command not found.
end: Too many arguments.

내 스크립트가 예상대로 작동하지 않습니다. 나는 csh를 읽고 있다여기.

답변1

while한 줄에서 루프를 수행할 수 있는지 잘 모르겠습니다 . 그러나 몇 가지 수정 가능한 버그가 있습니다.

  • while[counter!=0]그래야 합니다 while ($counter != 1) (" " 앞뒤의 공백에 유의하세요 !=).
  • set counter = counter-1그래야 합니다 @ counter = $counter – 1 (" " 앞뒤의 공백에 유의하세요 ).
  • P=$P/..set P=$P/..–– 이상 이어야 합니다 set P="$P/.."( $P공백이 포함된 경우).
  • 그것은 같은 이유로 set P=$PWD이어야 하고 set P="$PWD", cd $P되어야 하고 cd "$P", setenv MPWD=$P되어야 한다는 것을 상기시켜 줍니다 .setenv MPWD="$P"
  • while그리고 루프가 한 줄에서 모두 작동 하도록 하려면 ;아마도 end.

답변2

여러 줄로 구성된 코드의 경우 별칭은 작은따옴표로 묶어야 하며 각 줄 끝에 백슬래시가 앞에 와야 합니다. 마지막 줄의 끝은 별칭의 끝을 구분하는 작은따옴표 앞에 와야 합니다.

alias up 'set counter = \!$\
set p = "$cwd"\
while ( $counter >= 1 )\
@ counter = $counter - 1\
set p = "$p/.."\
end\
cd "$p"\
setenv mpwd "$p"'

명령 편집기/기록에 문제가 있는 경우 kill -INT $$별명 끝에 추가하십시오.

그런데 변수를 설정할 때 set등호를 사용하여 변수 이름과 내용을 구분하는 것이 가장 좋습니다. 등호는 setenv필요하지 않습니다. @제어 구조는 괄호를 사용하여 제공됩니다.$cwd현재 작업 디렉토리를 인쇄합니다. 더 나은 숫자 테스트를 위해 보다 큼(>; >=) 및 보다 작음(<; <=) 연산자를 사용합니다 \!$.

관련 정보