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