Работает для меня, вот полный пример кода.
Примечание. Я использовал SQLcl не SQLPlus, а ту же концепцию.
Понятия не имею, что у вас есть.,код, так что, может быть, проблема есть?
Jeffreys-Mini:19.1 thatjeffsmith$ procedure_string="CREATE OR REPLACE PROCEDURE SO_BASH is BEGIN
> null;
> END SO_BASH;
> /
> "
Jeffreys-Mini:19.1 thatjeffsmith$ echo $procedure_string
CREATE OR REPLACE PROCEDURE SO_BASH is BEGIN null; END SO_BASH; /
Jeffreys-Mini:19.1 thatjeffsmith$ sql hr/oracle << EOF >> so.log
> $procedure_string
> EXIT;
> EOF
Jeffreys-Mini:19.1 thatjeffsmith$ more so.log
SQLcl: Release 18.3 Production on Fri Jun 14 10:16:57 2019
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Fri Jun 14 2019 10:16:58 -04:00
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0
Procedure SO_BASH compiled
Disconnected from Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0
Jeffreys-Mini:19.1 thatjeffsmith$
И просмотр моей схемы ...
![enter image description here](https://i.stack.imgur.com/4ntSA.png)