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程序前面加上 egfoomatic_barmatic_,在这种情况下,我可以将所有目录添加到路径中,但我也不喜欢这个(实际上,我有很多这样的程序)。

有什么技巧可以bash理解foomatic/featurizer为某个地方的有效命令PATH吗?

4

1 回答 1

1

使用辅助 shell 变量并没有那么难看,并且可以很好地使用。另一种选择是编写一个简单的包装器,它将为您搜索 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 回答