findme
次のコードで呼び出されるbashスクリプトがあります。
#!/bin/bash
locate -Abi '*\.'$1 $2 | grep --color=always -ni $2 | less -R
ファイル名(次の引数を指定)にパターンがあり、指定されたファイル拡張子(スクリプトに指定された最初の引数)を持つすべてのファイルを検索します。
次のコマンドを実行すると:
user@machine$ findme pdf classifi
pdf
を含むすべてのファイルを検索します。classifi
だから私は次のようなものを得ることができます。
1:/ホーム/ユーザー/Dropbox/SharedWithFriends/数学/分類cations2000.pdf
2:/home/user/Dropbox/SharedWithFriends/math/分類カチオン2010.pdf
問題は次のとおりです。 「次のタスクを自動化するために結果を表示した後、数値とビューアを要求するbashスクリプトコードを提供できますか?」
たとえば、次のように入力すると:
> 2 evince
検索結果の2番目の項目に対してスクリプトが実行されevince
、2
つまり、これが前の検索結果に入力した内容であれば、次のようになります。
evince /home/user/Dropbox/SharedWithFriends/math/classifications2010.pdf
ベストアンサー1
findme
grep
これは結果を抽出する機能のバリエーションですが、結果に番号を付けたりページを付けたりする代わりに、内部配列からless
結果を一覧表示し、プロジェクトとプログラムを選択するように求められます。
#!/usr/bin/env bash
readarray -O 1 -t results < <(locate -Abi '*\.'"$1" "$2" | grep --color=always -i "$2")
for((i=1; i <= ${#results[*]}; i++))
do
printf "%d: %s\n" $i "${results[i]}"
done
read -p "> " item program
$program "${results[item]}"
ファイル名とgrepパラメータのスペースをよりよく処理するために、元のスクリプトにいくつかの引用符を追加しました。readarray
結果がゼロ以外のインデックス1から始まり、grepの番号に対応するように呼び出しを調整しました。