特定のLinuxコマンドに文字列コマンドライン引数を渡すbashスクリプト

特定のLinuxコマンドに文字列コマンドライン引数を渡すbashスクリプト

PDFでテキストを検索するために、オンラインで次のコマンドを見つけました。

find . -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;

スクリプトで自動化したいので、スクリプトファイルsearch_pdf.shに書きました。

#!/bin/bash
echo $1
find . -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$1"' \;

スクリプトにはいくつかのバグがあり、期待どおりに動作しません。誰でも私を助けることができますか?

ベストアンサー1

$1スクリプトをエクスポートしてみてください。

#!/usr/bin/env bash

pattern=$1
export pattern

find . -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$pattern"' \;

しかし、私はそれを次のように書き直すことをお勧めします

#!/usr/bin/env bash
pattern=$1
export pattern

find . -name '*.pdf' -exec sh -c 'for f; do
  pdftotext "$f" - | grep --with-filename  --color "$pattern"
done' _ {} +

おそらく追加する--label=$patternこともできます

おすすめ記事