我正在尝试创建一个ShellScript,该脚本将连接sqlplus并在子文件夹中执行file.sql。
- folderA/
* scripts/myShellScript.sh
* sql/mySql.sql
我想从myShellScript.sh执行mySql.sql。
我尝试过:
@../sql/mySql.sql
但是返回:找不到文件。
这是我的代码:
sqlplus -s $username/$password > logtest << EOF
WHENEVER OSERROR EXIT 9;
WHENEVER SQLERROR EXIT SQL.SQLCODE;
set echo on
set time off
set timing off
set heading off
set termout off
prompt ...
@../mySql.sql
SPOOL OFF
exit;
感谢您的帮助!
答案 0 :(得分:0)
@
之后的路径是相对于调用路径myShellScript.sh
的路径,而不是相对于路径myShellScript.sh
所在的路径。
如果您将cd
插入folderA/scripts/
,并运行./myShellScript.sh
并将SQL文件引用为@../sql/mySql.sql
,那么它应该可以正常工作。
相反,如果您是从myShellScript.sh
作为folderA/
来调用./scripts/myShellScript.sh
,则必须使用@./sql/mySql.sql
。
从任意位置调用myShellScript.sh
的一种可能方法是在脚本中添加对当前目录的一些处理:
cd "${0%/*}"
sqlplus -s $username/$password > logtest << EOF
...
@../sql/mySql.sql
这样,sqlplus
从myShellScript.sh
所在的路径运行。
但是,当然,这也会改变logtest
的写入路径。
实际上,我见过的最常见的方法是将所有路径都指定为绝对路径,并将其保存在变量中:
sqlpath=/path/to/sql/files
logpath=/path/to/logs
sqlplus USER/PASSWD >"$logpath"/logtest @"$sqlpath"/mySql.sql