ShellCheck警告:"迭代ls输出是脆弱的。使用globs。 [SC2045]"

时间:2017-12-07 19:34:14

标签: bash ls shellcheck

我在下面的代码中获得第二行的ShellCheck警告[SC2045]。可以忽略它,因为我在尝试上一个import { Component } from '@angular/core'; import { NavController, NavParams } from 'ionic-angular'; import { IonicPage } from 'ionic-angular/navigation/ionic-page'; import { Http } from '@angular/http'; @Component({ selector: 'page-lista', templateUrl: 'lista.html', }) @IonicPage({ name:'lista-page' }) export class ListaPage { private tipo: string=""; private recetas: any=""; constructor(public navCtrl: NavController, public navParams: NavParams, private http: Http) { this.tipo = this.navParams["data"]; this.getData(); } getData(){ this.http.get('/assets/data/datosReceta.json') .map((res)=>res.json()) .subscribe(data=>{ console.log(this.tipo); for(let tipo of data["data"]){ if(tipo["tipo"]==this.tipo){ this.recetas=tipo["recetas"]; console.log(this.tipo); } } },(rej)=>{console.error("Error",rej)}) } } 之前确保目录不为空吗?

ls

更新 看完帖子评论后。我已将行改为:

 if [ "$(ls -A "$retryDir")" ]  ; then
    for thisRetryFile in $(ls "$retryDir"/*.tar.gz) ; do
        scp -o ConnectTimeout=30  "$thisRetryFile"  \             
              "$remoteUser@$remoteHost:$remotePath" >> "$BACKUPLOG"
    done
 fi

这已删除了警告。

2 个答案:

答案 0 :(得分:4)

将循环与glob一起使用,并设置nullglob以避免在模式与任何内容不匹配时执行scp。 而且您也不需要外部if条件, 由于fornullglob有效地解决了这个问题:

shopt -s nullglob

for thisRetryFile in "$retryDir"/*.tar.gz; do
    scp -o ConnectTimeout=30  "$thisRetryFile" \
          "$remoteUser@$remoteHost:$remotePath" >> "$BACKUPLOG"
done

如果你想在没有文件与模式匹配的情况下捕捉到这种情况, 您可以这样写,而不使用shopt -s nullglob

for thisRetryFile in "$retryDir"/*.tar.gz; do
    if [ -f "$thisRetryFile" ]; then
        scp -o ConnectTimeout=30  "$thisRetryFile" \
            "$remoteUser@$remoteHost:$remotePath" >> "$BACKUPLOG"
        break
    else
        echo "warn: no tar.gz file in dir: $retryDir"
    fi
done

答案 1 :(得分:-1)

这更安全。试试吧。

 if [ "$(ls -A "$retryDir")" ]  ; then
    for thisRetryFile in ${retryDir}'/*.tar.gz' ; do
        scp -o ConnectTimeout=30  "$thisRetryFile"  "$remoteUser@$remoteHost:$remotePath" >> "$BACKUPLOG"
    done
 fi

问候!