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현재 작업 디렉토리를 인쇄합니다. 더 나은 숫자 테스트를 위해 보다 큼(>; >=) 및 보다 작음(<; <=) 연산자를 사용합니다 \!$
.