Путь после @
относится к пути, по которому вызывается 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