我有一个 bash 脚本,需要计算给定 arango 集合中存在的记录/文档的数量。这看起来很简单,我使用了以下arangosh
调用:
records=$(docker exec -it arango arangosh --javascript.execute scripts/getCount.js $collection --server.password '')
然后运行以下脚本:
#!/usr/bin/arangosh --javascript.execute
var collection = ARGUMENTS[0];
var doc = db[collection];
var c = doc.count();
print(c);
这似乎有效,但是当我echo $records
得到正确的值但它显示为粗体时。这会导致其他阅读问题,因此我将调用重定向docker exec
到cat -v
并得到以下输出:
^[[1m#####^[[0m^M
#### 是我的记录值,它是正确的。如何正确打印 out ofarangosh
或 out of 的值docker exec
?或者是从我的值中删除这些隐藏的 ansi 字符的唯一途径?
更新:
我能够直接尝试docker exec -it arango arangosh
并尝试该命令。db._collection('my_collection').count()
这返回了一个粗体值,我认为这意味着它包含隐藏字符(arangosh
没有cat
定义,所以我无法 100% 验证)。
话虽如此,我认为问题是,是否可以以纯文本格式导出,或者我是否需要sed
在脚本收到响应后替换这些字符?
答案1
仍然希望得到更好的答案,但我能够通过以下方式得到我需要的东西:
imported=`docker exec -it arango arangosh --javascript.execute scripts/getRecords.js $collection --server.password '' | cat -v | sed 's/\(\^\[\[1m\)//g;s/\(\^\[\[0m^M\)//g'`
这只是将 docker 的详细输出传递给sed
替换。考虑到对于这个脚本,我希望我提供给这个脚本的所有集合的字符都相同,这应该可以解决问题(只是非常有限)。