2017-08-20 6 views
2

私のbash関数では、grepを使用して文字列から一致するパターンを取得し(配列を作成したファイルを選択) 。文字列がgrepキャプチャから作成されたbash配列の各要素の引用符を削除するには

files=($(echo "$output" | ggrep -oP 'create\s\K(.+)')) 

を実行した後output

installing route 
    create app/routes/foo.js 
    create app/templates/foo.hbs 
updating router 
    add route foo 
installing route-test 
    create tests/unit/routes/foo-test.js 

という変数に割り当てられている私は私がecho ${files[*]}を実行してするつもり何をキャプチャしていたことを確認します。そう

app/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.js 

私の目標は、NPMスクリプト(npm run lint <list of files>)に引数としてこれらのファイルを渡すことであるとして、端末での出力が見えます。私は

"app/routes/foo.js" "app/templates/foo.hbs" "tests/unit/routes/foo-test.js" 

または

"app/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.js" 

のようなファイル名のいずれかのプリントアウト、NPMスクリプトの実行に私の変数に接続しようとすると、しかし、ここでの究極の目標は、

を実行できるようにすることです
npm run lint app/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.js 

私はfile変数を補間するためにたくさんの組み合わせを試しましたが、何も動作しないようです。私は概念的に何かを逃している、または間違った方法でこれに近づいているように感じます。もともと私はfileの配列を使わずにこれを試していましたが、私は同じ問題を抱えていました。私の最初のパスは、これをbashで動かすことです。しかし、私はgrepまたはsedをここに使用して固執したいと思います。誰でも何か提案がありますか?私はecho $parsedfilesを実行すると、私の端子出力はapp/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.jsよさそうだが、npm run "app/routes/foo.js" "app/templates/foo.hbs" "tests/unit/routes/foo-test.js"

がここ 本当の問題を解決しようとして、次の行に、それはまだ出力

parsedfiles=$(echo "${files[*]}" | sed -e 's/"//g') 
echo $parsedfiles 
npm run lint $parsedfiles 

を試してみましたが、読んで提案した後

私がargsをどのように渡しているかについてではありませんでした。実際にはnpm scriptを実行している問題です。 argsをnpmスクリプトに渡すと、自動的に二重引用符で囲まれます。

+0

をVARを使用することができ、ファイル・パスは、個々のまたは一つの大きな文字列としてNPMに渡された場合、現在発生するエラーとは何ですか? – MicFin

+0

これらのアプローチを試しましたか? https://stackoverflow.com/questions/9590034/getting-bash-variable-into-filename-for-zip-commandまたはhttps://stackoverflow.com/questions/16703624/bash-interpret-string-variable-as-ファイル名のパス – MicFin

+0

これはevalの良いユースケースでしょうか? https://stackoverflow.com/questions/11065077/eval-command-in-bash-and-its-typical-uses – MicFin

答えて

1

次のようにテキストを編集するにはsedを使用します。

$ var=`echo "app/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.js" | sed -e 's/"//g'` 

test$ echo $var 
app/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.js 

今、あなたは、NPMの実行糸くずで

$ npm run lint $var 
+0

$ varをエコーし​​たときに見栄えが良いようですが、変数を 'npm run lintコマンド'に補間すると 'app/routes/foo.js"のように見えます。 "app/templates/foo.hbs" " tests/unit/routes/foo-test.js " –

+0

npmスクリプトを引数で実行することに問題がありました。これは引用符で囲んでいるためです。私が最初に述べたことを達成するために、これは素晴らしい解決策です。ご協力ありがとうございます! –

関連する問題