次のスクリプトがあります。
#!/bin/bash
set -x
if :; then
echo a
fi
実行するとbash /tmp/file
、a
エコーされますがsource /tmp/file
、実行すると、次のようになります:
bash: /tmp/test: line 6: syntax error: unexpected end of file
出力:
knezi@holly tmp]$set -x; source /tmp/test; set +x
+ source /tmp/test
++ set -x
bash: /tmp/test: line 6: syntax error: unexpected end of file
+ set +x
knezi@holly tmp]$set -x; command source /tmp/test; set +x
+ set -x
+ command source /tmp/test
+ source /tmp/test
++ set -x
bash: /tmp/test: line 6: syntax error: unexpected end of file
+ set +x
knezi@holly tmp]$bash -c "source /tmp/test"
+ bash -c 'source /tmp/test'
++ :
++ echo a
a
knezi@holly tmp]$od -c /tmp/test
0000000 # ! / b i n / b a s h \n s e t
0000020 - x \n i f : ; t h e n \n \t e
0000040 c h o a \n f i \n
0000051
コマンドの出力shopt -p
およびset -o
:http : //pastebin.com/bsqc8aru
出力set
:http : //pastebin.com/S9KpqZAL
declare -fp
何も生成しません。
私はそれsource
がと同じだと思ったが、bash
新しいセッションを開始する代わりに、現在のセッションでコードを実行する。誰も私にこのエラーを説明できますか?
bash GNU bashバージョン4.2.53(1)-release(x86_64-redhat-linux-gnu)を実行します。
1
いいえ、これはコード全体です。改行は0aです。
—
knezi
@Rahul Unix改行文字の16進コード
—
PSkocik
ある
—
ロアイマ
$BASH_ENV
セットは?
@PSkocikそれは本当に奇妙です。bash -c "source / tmp / test"は機能します。
—
knezi
ああ!それが機能する
—
テルドン
bash -c
ことを質問に追加してください。次に、~/.bashrc
ファイルの内容を表示します。おそらく、何かを台無しにしているものがそこにあります。