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

ただし、既存のシェルプロセスで変数を変更する代わりに新しい(サブ)シェルを起動できる場合は、より簡単な解決策があります(他の回答を参照)。

関連情報