OpenBSDでファイルを提供するパッケージを見つけるシェルスクリプト

OpenBSDでファイルを提供するパッケージを見つけるシェルスクリプト
# for i in `pkg_info -q`; do pkg_info -L "$i" | grep ^/ | sed "s/^/$i/g" | perl -pe 's/\//\t\//'; done | grep tasklist.desktop
xfce4-panel-4.10.0p2    /usr/local/share/xfce4/panel/plugins/tasklist.desktop
# pkg_file() { for i in `pkg_info -q`; do pkg_info -L "$i" | grep ^/ | sed "s/^/$i/g" | perl -pe 's/\//\t\//'; done | grep $1; } 
ksh: syntax error: `{' unexpected
# 

尋ねる:私は何を見逃していますか? .profileファイルを入れたいのですが、その行を関数に入れるとエラーが表示されます。

答え1

既存のツールを使用することもできます。コマンドはpkglocate以下から来ます。pkglocationbパッケージを使用すると、インストールするかどうかに関係なく、すべてのOpenBSDパッケージ内のすべてのファイルを検索できます。

$ pkglocate /usr/local/share/xfce4/panel/plugins/tasklist.desktop
xfce4-panel-4.10.1:x11/xfce4/xfce4-panel:/usr/local/share/xfce4/panel/plugins/tasklist.desktop

インストールされているパッケージのみを検索できます。梱包情報(1):

$ pkg_info -qE /usr/local/share/xfce4/panel/plugins/tasklist.desktop
xfce4-panel-4.10.1

答え2

関数定義の構文が正しくありません。そうではfoo() {}ありませんfoo {}

関連情報