破折号:当我的脚本甚至不包含反引号时,为什么会出现错误“语法错误:EOF在反引号中”?

哈罗德·菲舍尔
#!/bin/sh --

for set_trap_sig in HUP INT QUIT ALRM TERM; do
    trap -- '
        trap -- - '"${set_trap_sig:?}"' EXIT || exit "$?"
        kill -s '"${set_trap_sig:?}"' -- "$$" || exit "$?"' "$set_trap_sig"
done

sleep 15 || exit "$?"

当我将SIGINT发送到脚本时,会发生以下情况

user@hostname:/tmp$ ./script.sh
^C./script.sh: 3: ./script.sh: Syntax error: EOF in backquote substitution

这个问题似乎特定于破折号。在ash,bash和ksh93上,我没有收到此错误。这特别奇怪,因为我的脚本甚至不包含反引号字符。

如果我删除第$?5行结尾处的双引号,错误就会消失。

我是在做一些愚蠢的事情还是破折号?是的,我知道我写的脚本像偏执型精神分裂症一样。

编辑:我们已经建立了一个非常严重的错误,甚至影响了Ubuntu和Debian的现代版本。有人知道解决方法吗?

满天星

这是一个简化的测试用例:

trap '
        trap    - HUP EXIT || exit "$?"
        kill -s HUP    "$$" || exit "$?" ' HUP INT
kill -HUP $$
$ dash dash-bug
dash-bug: 3: /home2/ahq/dash-bug: Syntax error: EOF in backquote substitution

修改引用代码的长度或内容可能会“修复”该错误,也可能会产生其他有趣的损坏,其中随机字节会无处不在。

这是由于先后释放错误引起的,该错误自0.5.9版以来已得到修复,但仍然存在于Debian 9.8稳定版(拉伸),Ubuntu 18.04(仿生版)和Ubuntu 18.10(宇宙版)的0.5.8版中。

这是修复它提交

commit 6c3f73bc536082fec38bd36e6c8a121033c68835
Author: Herbert Xu <[email protected]>
Date:   Thu Oct 2 08:26:06 2014 +0800

    [EVAL] Fix use-after-free in dotrap/evalstring

    The function dotrap calls evalstring using the stored trap string.
    If evalstring then unsets that exact trap string then we will end
    up using freed memory.

    This patch fixes it by making evalstring always duplicate the string
    before using it.

    Signed-off-by: Herbert Xu <[email protected]>

一种变通方法是将陷阱处理程序放入函数中,以便在取消设置陷阱后不运行任何命令,尝试在释放它之后尝试使用操作字符串:

sighandler(){
    trap - "$sig" EXIT || exit "$?"
    kill -s "$sig" "$$" || exit "$?"
}
for sig in HUP INT QUIT ALRM TERM; do
    trap "sig=$sig; sighandler" "$sig"
done

kill -s HUP "$$"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

语法错误:反引号替换中的EOF

来自分类Dev

当我尝试打印包含带有冒号的键的嵌套哈希时,为什么会出现语法错误?

来自分类Dev

语法错误:反引号替换中的EOF使得:*** [mainwindow.o]错误2

来自分类Dev

当我尝试将变量放入Xpath时,为什么每次都会出现语法错误

来自分类Dev

破折号和反引号的RegEx,如果包含在字符串中,则仅在出现之前和之后出现字母

来自分类Dev

为什么在启动远程SSH命令的脚本中双引号引起双引号时会出现错误?

来自分类Dev

我为什么要远程:sh:2:语法错误:当我运行git push heroku master时,引号引起来的字符串未终止

来自分类Dev

当我在脚本标记中包含“模块”时,为什么onclick出现错误?

来自分类Dev

从Python调用bash脚本时出现“语法错误:引号末尾的字符串”错误

来自分类Dev

从Python调用bash脚本时出现“语法错误:引号末尾的字符串”错误

来自分类Dev

如果我不在AWK的END块中写'if',为什么会出现语法错误?

来自分类Dev

如果我不在AWK的END块中写'if',为什么会出现语法错误?

来自分类Dev

sh:1:语法错误:使用反引号perl时重定向意外

来自分类Dev

Heroku Deploy错误:“ sh:语法错误:反引号中的EOF”和未定义的局部变量或方法“ install_language_pack_gems”

来自分类Dev

为什么Xaringan幻灯片中没有出现智能引号和破折号?

来自分类Dev

时代精神记录的假小子笔记不会出现在Unity破折号中。为什么不?

来自分类Dev

为什么会出现错误:语法错误,意外的“ in_array”?我试图找出变量是否在数组中

来自分类Dev

为什么我生成的Flex / Bison解析器即使在规则中添加了语法,也会出现语法错误?

来自分类Dev

当我尝试使用htacces从laravel中删除公共目录时,为什么会出现错误

来自分类Dev

Access 2013:为什么会出现此语法错误?

来自分类Dev

为什么会出现语法错误:缺少';' 在“ *”之前

来自分类Dev

为什么使用exec()会出现语法错误?

来自分类Dev

为什么会出现“ INSERT INTO语句中的语法错误”?

来自分类Dev

为什么重启后会出现语法错误?

来自分类Dev

列表中的#<eof>时出现球拍错误的语法错误

来自分类Dev

尝试将if语句放入触发器时,为什么会出现语法错误?

来自分类Dev

Haskell:为什么可以在ghci中加载此文件,但是当我在拥抱中尝试执行相同操作时,却出现语法错误?

来自分类Dev

为什么我的脚本中出现此错误?awk: script.awk:19: “ 语法错误

来自分类Dev

仅当我在C项目中使用代码时才会出现list.h语法错误

Related 相关文章

  1. 1

    语法错误:反引号替换中的EOF

  2. 2

    当我尝试打印包含带有冒号的键的嵌套哈希时,为什么会出现语法错误?

  3. 3

    语法错误:反引号替换中的EOF使得:*** [mainwindow.o]错误2

  4. 4

    当我尝试将变量放入Xpath时,为什么每次都会出现语法错误

  5. 5

    破折号和反引号的RegEx,如果包含在字符串中,则仅在出现之前和之后出现字母

  6. 6

    为什么在启动远程SSH命令的脚本中双引号引起双引号时会出现错误?

  7. 7

    我为什么要远程:sh:2:语法错误:当我运行git push heroku master时,引号引起来的字符串未终止

  8. 8

    当我在脚本标记中包含“模块”时,为什么onclick出现错误?

  9. 9

    从Python调用bash脚本时出现“语法错误:引号末尾的字符串”错误

  10. 10

    从Python调用bash脚本时出现“语法错误:引号末尾的字符串”错误

  11. 11

    如果我不在AWK的END块中写'if',为什么会出现语法错误?

  12. 12

    如果我不在AWK的END块中写'if',为什么会出现语法错误?

  13. 13

    sh:1:语法错误:使用反引号perl时重定向意外

  14. 14

    Heroku Deploy错误:“ sh:语法错误:反引号中的EOF”和未定义的局部变量或方法“ install_language_pack_gems”

  15. 15

    为什么Xaringan幻灯片中没有出现智能引号和破折号?

  16. 16

    时代精神记录的假小子笔记不会出现在Unity破折号中。为什么不?

  17. 17

    为什么会出现错误:语法错误,意外的“ in_array”?我试图找出变量是否在数组中

  18. 18

    为什么我生成的Flex / Bison解析器即使在规则中添加了语法,也会出现语法错误?

  19. 19

    当我尝试使用htacces从laravel中删除公共目录时,为什么会出现错误

  20. 20

    Access 2013:为什么会出现此语法错误?

  21. 21

    为什么会出现语法错误:缺少';' 在“ *”之前

  22. 22

    为什么使用exec()会出现语法错误?

  23. 23

    为什么会出现“ INSERT INTO语句中的语法错误”?

  24. 24

    为什么重启后会出现语法错误?

  25. 25

    列表中的#<eof>时出现球拍错误的语法错误

  26. 26

    尝试将if语句放入触发器时,为什么会出现语法错误?

  27. 27

    Haskell:为什么可以在ghci中加载此文件,但是当我在拥抱中尝试执行相同操作时,却出现语法错误?

  28. 28

    为什么我的脚本中出现此错误?awk: script.awk:19: “ 语法错误

  29. 29

    仅当我在C项目中使用代码时才会出现list.h语法错误

热门标签

归档