如何通过字符串将shell输出写入文件

时间:2017-07-31 15:47:44

标签: javascript bash shell console sh

我有一些shell进程,我需要通过特定行的字符串来捕获它带来的错误。所以,我这样做:

OUTPUT="$(npm run generate_post)"
echo ${OUTPUT} | grep "_currentUrl" * > error.log

但我没有任何结果,有人可以帮忙吗?

2 个答案:

答案 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
     }
});