我有一些shell进程,我需要通过特定行的字符串来捕获它带来的错误。所以,我这样做:
OUTPUT="$(npm run generate_post)"
echo ${OUTPUT} | grep "_currentUrl" * > error.log
但我没有任何结果,有人可以帮忙吗?
答案 0 :(得分:1)
我猜你的npm run generate_post
正在STDERR上输出错误,但是你正在捕获STDOUT。试试这个:
OUTPUT="$(npm run generate_post 2>&1)"
echo ${OUTPUT} | grep "_currentUrl" * > error.log
请注意,以上内容将捕获两者 STDERR和STDOUT。有关详情,请参见this answer。
答案 1 :(得分:1)
首先,你的陈述没有意义:
*
星号扩展到工作目录中的文件,grep正在那里搜索模式,忽略来自stdin的内容。我不知道你对npm run generate_post | grep _currentUrl
的意图。
然后,您没有指定以后是否需要npm的完整输出。假设你没有,你可以写
npm run generate_post | tee npm_output.txt | grep _currentUrl
当然,遵循Triptych的建议捕捉stderr也许是明智之举,但这是另一回事。
如果确实需要npm的完整输出,请考虑将其放入文件而不是变量 - 当然这取决于您以后如何使用它,所以这只是以下几个选项之一:
var features = Ext.create('Rally.ui.combobox.ArtifactSearchComboBox', {
itemId: 'features',
allowNoEntry: false,
storeConfig: {
models: ['PortfolioItem/Feature'],
fetch: ['FormattedID', 'Name', 'ObjectID', 'UserStories'],
pageSize: 100,
autoLoad: true // or false if you want to wait to load until click
},
fieldLabel: 'Select Feature',
listeners: {
ready: function (combobox) {
if (combobox.getRecord()) {
this._onFeatureSelected(combobox.getRecord());
}
},
select: function (combobox) {
if (combobox.getRecord()) {
this._onFeatureSelected(combobox.getRecord());
}
},
scope: this
}
});