我正在尝试按照以下说明为Dash生成docsets:http://kapeli.com/docsets。 问题是,脚本在wget之后不会继续,并且不会抛出任何错误。当我将脚本复制到终端时,一切正常。
我正在使用MacOS 10.8.4和默认的bash。
#!/usr/bin/env bash
set -e
mkdir -p $1.docset/Contents/Resources/Documents/
wget -rkp -l3 -np -nH --cut-dirs=1 --directory-prefix="./"$1".docset/Contents/Resources/Documents/" $2
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>'$1'</string>
<key>CFBundleName</key>
<string>'$1'</string>
<key>DocSetPlatformFamily</key>
<string>'$1'</string>
<key>isDashDocset</key>
<true/>
</dict>
</plist>' > $1.docset/Contents/Info.plist
touch $1.docset/Contents/Resources/docSet.dsidx
sqlite3 $1.docset/Contents/Resources/docSet.dsidx "
CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);
CREATE UNIQUE INDEX anchor ON searchIndex (name, type, path);
INSERT INTO searchIndex (name, type, path) VALUES ('index', 'Guide', 'index.html');"
Wget收到了相当多的404错误并返回退出状态8(echo $?
)。实际的问题然后解决了,但是,我仍然不知道该怎么做:删除set -e
工作,很好,但感觉不对。
答案 0 :(得分:1)
<强>更新强>
我原来的答案是对你的问题的误解。这似乎是个问题的一个问题是:
INSERT INTO searchIndex (name, type, path) VALUES (index, Guide, 'index.html');
这里不确定。但似乎您可能想要制作index
和Guide
字符串,如下所示:
INSERT INTO searchIndex (name, type, path) VALUES ('index', 'Guide', 'index.html');
答案 1 :(得分:1)
您启用了set -e
。如果其中一个命令返回非零退出代码,则您的脚本将退出。有些人会在没有消息的情况下结束。
要知道导致问题的命令,请使用-x
运行脚本:
bash -x script.sh
或者在它之前添加set -x:
set -x
set -e
答案 2 :(得分:1)
尝试使用此处的文档,如下所示:
cat > "$1.docset/Contents/Info.plist" << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>$1</string>
<key>CFBundleName</key>
<string>$1</string>
<key>DocSetPlatformFamily</key>
<string>$1</string>
<key>isDashDocset</key>
<true/>
</dict>
</plist>
EOF
不太容易引用错误
答案 3 :(得分:1)
wget的退出状态8表示对于其中一个文件服务器返回错误(例如404):
服务器发出了错误响应。
您可能想要修改网址,因此他们指向正确的网址,或忽略wget
的退出状态,例如
wget ... || true
注意:除非您启用了pipefail
选项,否则上述内容将有效。
其他方式是比较退出状态,并在返回8时忽略,例如:
wget ... || { [ $? -ne 0 ] && [ $? -ne 8 ] && echo Success || exit 1; }
请参阅:{{3}}