我有一个 bash 脚本,它cat
是一个 heredoc 字符串,我在鱼壳中运行它,然后将它传递给一个source
调用,如下所示:
~/foo/baz:
1 #!/usr/bin/env bash
2
3 cat << EOS
4 function bar
5 echo 'Hello world'
6 end
7 EOS
从鱼壳:
richiethomas@richie ~/foo (master) [126]> ./baz | source
richiethomas@richie ~/foo (master)> bar
Hello world
如上所示,这导致bar
我运行时可以调用该函数./baz | source
。
但是,当我将bar
函数的实现更改为以下内容时出现错误:
1 #!/usr/bin/env bash
2
3 cat << EOS
4 function bar
5 set myVar 5
6 switch $myVar
7 case 4
8 echo '4'
9 case 5
10 echo '5'
11 case '*'
12 echo 'Not found'
13 end
14 end
15 EOS
当我尝试source
这样做时,我收到以下错误:
richiethomas@richie ~/foo (master) [0|1]> ./baz | source
- (line 1): Missing end to balance this function definition
function bar
^
from sourcing file -
source: Error while reading file '<stdin>'
当我将其直接粘贴到鱼壳中时,等效的函数 + switch 语句可以正常工作:
richiethomas@richie ~/foo (master) [0|1]> function bar
set myVar 5
switch $myVar
case 4
echo 'it is 4!'
case 5
echo 'it is 5!'
case '*'
echo 'not found'
end
end
richiethomas@richie ~/foo (master)> bar
it is 5!
我end
在文件和复制/粘贴到 shell 中的代码中都有相同的语句数baz
,所以我怀疑错误语句是红鲱鱼?如果是这样,我不知道真正的错误可能是什么。
我的目标是能够在 bash 脚本的 heredoc 字符串中构造一个 fish 函数,然后从 fish 脚本中获取该 bash 脚本,以便我可以调用该函数。我在这里哪里做错了?
变量 (
$myVar
) 在 heredocs 中得到扩展,除非您引用它:参考 3.6.6 此处的文档