案件
我正在尝试将指定文件中<value>*</value>
的所有出现的替换为。<value>file:\\</value>
test.txt
我在 Windows 上工作并使用sed
已安装的 Win-32 编译的 bash 实用程序集。
我使用以下命令:
sed -n "s/<value>.*<\/value>/<value>file:\\\\<\/value>/g" "test.txt" > "test.txt.new"
我想将此命令作为工作量脚本。
问题
当我从命令行使用此命令时,一切都正常运行。
但是当我通过这个命令时工作量脚本:
<install cmd='%BASH%\sed -n "s/<value>.*<\/value>/<value>file:\\\\<\/value>/g;" test.txt" > "test.txt new"' />
...然后我得到的是:
Exit code returned non-successful value (2) on command '%BASH%\sed -n "s/<value>
.*<\/value>/<value>file:\\\\<\/value>/g;" "test.txt" > "test.txt.new"'.
以上意味着sed
应用程序返回退出代码 2。此外,新文件尚未创建。
我在 Google 上浏览了很长时间,令我惊讶的是,sed
文档似乎很差。我没有找到有关此退出代码的文档。
问题
有谁知道吗退出代码 2 是什么意思意思是sed
?
...或者有其他解决方案?
(必须是无人看管,肯定可能会使用常见的 bash 工具)
答案1
我不确定您的问题出在sed
。 %BASH% 是否应该评估可执行文件所在的目录?sed
您是否确认它确实如此?因为我的预期是(如果在 Windows 上定义)%BASH% 将评估可执行文件bash
本身的路径,在这种情况下在其上附加“\sed”是没有意义的。
我特别要注意的是,DOS 错误代码 2 是“未找到文件”——也许是查找文件“%BASH%\sed”存在问题?
答案2
sed 是否发出退出代码?
大多数 sed 版本都没有此功能,但请检查您所使用的版本附带的文档。如果程序正常终止,GNU sed 将发出退出代码 0;如果脚本中有错误,则发出 1;2 如果脚本执行过程中出现错误。
来源SED 常见问题解答: