Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash-使用命令分析文本文件时未找到命令_Bash_Shell_Parsing_Quoting - Fatal编程技术网

bash-使用命令分析文本文件时未找到命令

bash-使用命令分析文本文件时未找到命令,bash,shell,parsing,quoting,Bash,Shell,Parsing,Quoting,我有一个由不同命令组成的文本文件: set +e; false; echo $? (false;   echo foo); echo \ $? for i in .; do (false; echo foo); echo \ 1:$?; done; echo \ 2:$? 等等 我想在bash子进程中使用set-e逐行测试这些命令,然后检查父bash进程中的错误代码,查看子进程是否带错误退出。我一直在研究如何处理更简单的命令(例如上面列出的第一个命令)。以下是我最近的一次尝试: mapfile

我有一个由不同命令组成的文本文件:

set +e; false; echo $?
(false;   echo foo); echo \ $?
for i in .; do (false; echo foo); echo \ 1:$?; done; echo \ 2:$?
等等

我想在bash子进程中使用
set-e
逐行测试这些命令,然后检查父bash进程中的错误代码,查看子进程是否带错误退出。我一直在研究如何处理更简单的命令(例如上面列出的第一个命令)。以下是我最近的一次尝试:

mapfile file < "$dir"/errorData
bash -c "${file[0]}"
echo $?
我试过几种变种,但运气不好。使用
bash-c\'“${file[1]}”\'
会导致一条关于找不到命令的错误消息,现在将上述三个字符串合并为一个长字符串。当然,只需将文件命令用强引号括起来,并在交互式shell中将它们直接输入到
bash
,就可以了


编辑:我正在使用bash 4.4.12(1)

对于任何发现shell正在以似乎违反参考手册的方式解析其文本的人,请确保检查任何复制的输入数据是否存在不可见的控制字符。例如,我在输入文件中找到了一个不间断的空格,代替了看起来简单的空白,其中包含要执行的命令。这在从网页复制到编辑器或命令行时尤其常见。bash使用空格、制表符和换行符来标记,而不是不间断的空格(Unicode标准中的U+0020)。hex编辑器,例如hexfiend,可以帮助解决类似问题。

我无法在Bash v4.3.48上重现这些错误。一切正常。您确定要执行(-c)“${file[0]}”,还是要使用源代码而不是。“${file[0]}”@yacc不带-c,命令失败,因为bash需要一个文件或目录。@randomir我跟踪版本更新的频率不够高,无法对此发表评论。无论是从脚本读取命令还是以交互方式一行一行地输入命令,都会出现这些错误消息。@yacc结果显示输入文本有一个非中断空格(U+00A0),而不是空格(U+0020)。我想你可能有兴趣知道。再次感谢您的建议。您粘贴的数据不包含任何非中断空格(U+0020是常规空格,U+00A0是非中断空格)。这就是为什么总是将测试用例复制到一个新目录并运行它是一个好主意的众多原因之一。我粘贴了我正在使用的实际数据。
bash: set +e: command not found  
bash:  false: command not found  
bash:  echo 127: command not found