1

我正在尝试运行以下脚本将 RDF 数据加载到 Virtuoso 存储中。该脚本运行良好,但似乎没有任何内容上传到 Virtuoso,因为 SPARQL 查询不显示任何结果。任何想法为什么?

#!/bin/bash
/usr/local/virtuoso-opensource/bin/isql 1111 dba dba <<EOF
 SPARQL CREATE GRAPH <free>;
 ld_dir('/home/najib', 'term.rdf', 'free');
 rdf_loader_run();
 SPARQL SELECT * FROM <free> WHERE {?s ?o ?p};
 EOF
4

1 回答 1

1

引用您的heredoc EOF

#!/bin/bash
/usr/local/virtuoso-opensource/bin/isql 1111 dba dba <<'EOF'
SPARQL CREATE GRAPH <free>;
ld_dir('/home/najib', 'term.rdf', 'free');
rdf_loader_run();
SPARQL SELECT * FROM <free> WHERE {?s ?o ?p};
EOF

根据man bash

不对 word 执行参数扩展、命令替换、算术扩展或路径名扩展。如果 word 中的任何字符被引用,则分隔符是 word 上去除引号的结果,并且 here-document 中的行不展开。 如果 word 没有被引用,则 here-document 的所有行都经过参数扩展、命令替换和算术扩展。 在后一种情况下,字符序列 \ 被忽略,并且必须使用 \ 来引用字符 \、$ 和 `。

PS:还要确保关闭前没有空格EOF

于 2014-05-26T10:56:46.217 回答