Shell脚本在ksh中给出错误

Sam*_*rvb 0 linux bash shell ksh solaris

我有一个在Bash shell(使用Red Hat Linux)中执行时运行良好的脚本,但是这个脚本ksh在用于执行此脚本的Solaris 10(DB)服务器上失败.该脚本基本上从文件中逐行读取并执行存储过程(在Oracle中).以下是我的脚本:

#/bin/sh

for i in $(cat subscriber.txt); do

        SUBSCRIBER_ID="'$i'"
        sqlplus -s myuser/myuser  <<EOF
        execute delete_learnings($SUBSCRIBER_ID);
        commit;
        EXIT    
EOF
done
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

./removeLearnings.sh: syntax error at line 3: `$' unexpected
Run Code Online (Sandbox Code Playgroud)

知道可能出了什么问题吗?我应该更改脚本ksh吗?我无法在这台机器上进行调试,因为它是一个客户环境(我无法访问).

jll*_*gre 6

问题是$(...)符合POSIX但不受/bin/shSolaris 10及更早版本的旧版Bourne shell支持的构造.

您可以替换shebang来调用符合Solaris POSIX的shell:

#!/usr/xpg4/bin/sh
Run Code Online (Sandbox Code Playgroud)

或使用此遗留语法(少推荐):

for i in `cat subscriber.txt`; do
Run Code Online (Sandbox Code Playgroud)