bash 스크립트가 tcsh에서 시작될 때 명령이 작동하지 않는 동안?

bash 스크립트가 tcsh에서 시작될 때 명령이 작동하지 않는 동안?

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 ...".

그러나 기존 쉘 프로세스에서 변수를 변경하는 대신 새 (하위)쉘을 시작할 수 있다면 더 간단한 해결책이 있습니다(다른 답변 참조).

관련 정보