1
#!/bin/bash
export HIVE_OPTS="$HIVE_OPTS -hiveconf mapred.job.queue.name=hdmi-technology"
export HIVE_AUX_JARS_PATH=/home/hadoop/lib/HiveUDF.jar
hive -S -e 'set mapred.job.queue.name=hdmi-technology'
hive -S -e 'SELECT count(*) from testingtable2' > attachment.txt

上記のシェル スクリプト (count.sh) を以下のように実行しようとすると、常にエラーが発生します。シェル スクリプトを初めて使用するため、何が間違っているのかわかりません。環境変数を追加する方法もわかりません。シェルスクリプト。

bash-3.00$ sh count.sh
count.sh: HIVE_OPTS= -hiveconf mapred.job.queue.name=hdmi-technology^M: is not an
identifier

最初の 2 行で環境変数を追加しているのですが、シェル スクリプトで何か間違ったことはありますか? どんな助けでも大歓迎です。

以下のコメントに従って行ったすべての変更の後、

mv count.sh count, 
chmod +x count, 
./count

プロンプトでこれを直接実行しようとするとexport HIVE_AUX_JARS_PATH=/home/hadoop/lib/HiveUDF.jar問題なく動作しますが、質問で述べたようにシェルスクリプトにこれを追加しようとすると、常に「java.io.FileNotFoundException(File file:/home/hadoop/lib)」が発生します/HiveUDF.jar が存在しないのはなぜですか?

4

2 に答える 2

2

shbashではないコマンドを使用してbashスクリプトを実行しています。./count.shシバンラインが有効になるように実行するか、単に言いbash count.shます。

于 2012-07-27T00:50:50.800 に答える
1

\r\nUnix スタイルの LF ('\n') 行末の代わりにCRLF ペア ( ) を使用する DOS または Windows マシンでシェル スクリプトを編集しました。

これ^Mはおまけです。これは\rキャリッジ リターン文字です。

これで修正されるはずです:

tr -d '\r' < count.sh > count.sh.fixed
mv count.sh.fixed count.sh

別のオプション:

sed -i 's/\r//g' count.sh
于 2012-07-27T00:46:28.027 に答える