我正在尝试创建一个连接sqlplus并在子文件夹中执行file.sql的ShellScript。
- 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; 谢谢你的帮忙!
发布于 2019-01-31 17:16:29
@之后的路径是相对于调用myShellScript.sh的路径,而不是相对于myShellScript.sh所在的路径。
如果您通过cd进入folderA/scripts/并运行./myShellScript.sh,将SQL文件作为@../sql/mySql.sql引用,那么应该可以很好地工作。
相反,如果您以./scripts/myShellScript.sh的身份从folderA/调用myShellScript.sh,则必须使用@./sql/mySql.sql。
从任意位置调用myShellScript.sh的一种可能方法是在脚本中添加一些对当前目录的处理:
cd "${0%/*}"
sqlplus -s $username/$password > logtest << EOF
...
@../sql/mySql.sql这样,就可以从myShellScript.sh所在的路径运行sqlplus。
但是,当然,这也会改变logtest的写入路径。
实际上,我见过的最常见的方法是将所有路径指定为绝对路径,并将它们保存在变量中:
sqlpath=/path/to/sql/files
logpath=/path/to/logs
sqlplus USER/PASSWD >"$logpath"/logtest @"$sqlpath"/mySql.sqlhttps://stackoverflow.com/questions/54456507
复制相似问题