1

やや厄介な問題があります。crontab で、特定のプログラムにディレクトリのプレフィックスを付けたいのです。PATH私のプログラムのベース名は一意ではないため、これらすべてのディレクトリをに追加することはできません(そしてディレクトリはそれらを明確にするはずです)。私が望むものの例は、説明する最も簡単な方法です:

PATH=/data/some/place/bin:/usr/local/bin:/bin:/usr/bin

*/15 * * * * foomatic/featurizer > /dev/null 2>&1
*/15 * * * * barmatic/featurizer > /dev/null 2>&1

もちろん、ディレクトリfoomatic/barmatic/が両方とも の下/data/some/place/binにあり、両方に という有効なプログラムがあるにもかかわらず、これは機能しませんfeaturizer

私が考えることができる唯一のことは次のとおりです。

PATH=/usr/local/bin:/bin:/usr/bin
B=/data/some/place/bin

*/15 * * * * $B/foomatic/featurizer > /dev/null 2>&1
*/15 * * * * $B/barmatic/featurizer > /dev/null 2>&1

しかし、それはちょっと醜いです。

別の方法として、各featurizerプログラムの前に「eg 」foomatic_または「」を付ける方法がありますbarmatic_。この場合、すべてのディレクトリをパスに追加できますが、これも好きではありません (実際には、そのようなプログラムがたくさんあります)。

のどこかで有効なコマンドとしてbash理解するためのトリックはありますか?foomatic/featurizerPATH

4

1 に答える 1

1

補助シェル変数の使用はそれほど見苦しくなく、問題なく使用できます。もう 1 つのオプションは、PATH を検索する単純なラッパーを作成することです。たとえば、次のスクリプトを呼び出しますpath

#!/bin/bash

IFS=:
for i in $PATH; do
    cmd="$i/${1?No command specified}"
    if test -x $cmd; then
        shift
        IFS=$' \t\n'
        exec "$cmd" "$@"
    fi
done
echo Command not found: "$1" >&2
exit 1

次のようにcrontabから呼び出します。

path foomatic/featurizer
于 2013-07-20T02:17:34.260 に答える