bash
해당 명령이 포함된 쉘 스크립트를 만들었지 while
만 터미널에서 해당 명령을 사용하여 스크립트를 실행하면 source
구문 오류 메시지가 나타납니다.
source
터미널에서 환경변수를 설정해야 하기 때문에 사용해야 하는데 , 아니오 source
.
echo $shell
제공: 쉘은 주어진 대화식 출력이 /bin/csh
아닙니다 .ps -p $$
CMD : tcsh
스크립트는 다음과 같습니다
#! /bin/bash
i=1
while read line
do
echo "$line $i"
echo
i=$((i+1))
done < seed.txt
오류는 다음과 같습니다
i=1: Command not found.
while: Expression Syntax.
답변1
이 오류?
$ tcsh
tcsh> source while.sh
i=1: Command not found.
while: Expression Syntax.
tcsh> exit
Csh/tcsh는 POSIX sh 또는 Bash와는 다른 셸입니다. (t)csh에서 sh 구문을 사용하여 스크립트를 실행하려고 하면 작동하지 않습니다.
source
터미널에서 환경변수를 설정해야 하기 때문에 사용해야 하는데 , 아니오source
.
실제 내보낸 환경 변수로 만듭니다 setenv
.
tcsh> cat hello.sh
echo "hello, $name"
tcsh> bash hello.sh
hello,
tcsh> setenv name vikas
tcsh> bash hello.sh
hello, vikas
답변2
실행 방법은 다음과 같습니다.세게 때리다쉘 스크립트 및 해당 변경 사항을 기반으로tcsh변수(실제로 필요한 경우):
쉘 스크립트 작성myscript.bash이와 같이:
ANSWER="$((6*7)) 'quoted'"
echo "setenv answer '${ANSWER//\'/\'\\\'\'}'"
그런 다음 tcsh에서 실행하십시오.
bash myscript.bash >myscript.tcsh.out
source myscript.tcsh.out
echo "$answer"
그러면 다음이 인쇄됩니다:
42 'quoted'
${ANSWER//\'/\'\\\'\'}
값에 작은따옴표( '
)가 포함된 경우 대체하면 작동합니다. "
값에 공백이 포함되어 있으면 큰따옴표( )를 사용하여 작동시키세요.
여러 변수를 보낼 수 있습니다.tcsh, mor 라인을 추가하여 echo "setenv ..."
.
그러나 기존 쉘 프로세스에서 변수를 변경하는 대신 새 (하위)쉘을 시작할 수 있다면 더 간단한 해결책이 있습니다(다른 답변 참조).