编写路径随更新而更改的可执行文件的脚本



我正在寻找一种方法来在更改其路径的更新中找到pg_dump。 以下是两个最新版本的pg_dump,它们扰乱了我的自动备份crontabs

/usr/local/Cellar/postgresql@10/10.6_2/bin/pg_dump
/usr/local/Cellar/postgresql@10/10.8/bin/pg_dump

当脚本只是调用 pg_dump 时,它找不到,所以至少,它必须在脚本本身的$PATH中导出。 同样的问题。

有没有办法在运行脚本时嗅探pg_dump的位置?

有没有更好的方法可以在仍然使用pg_dump的同时完成此操作?

顺便说一句,我正在使用Mac OS,其realpath似乎不起作用。 它指向一个不存在的假/Users/rich/pg_dump

刚刚尝试了以下操作,日志的输出为空:

c1=$(which pg_dump)
echo $c1
eval $c1

当以我自己的用户身份运行时,这有效,但我不确定 crontab 的用户是谁。

这可能是你需要的:

pg_dump_path=$(find -L '/usr/local/Cellar/postgresql@10' -type f -name 'pg_dump' -printf '%T@t%fn' | sort -nr | head -1 | cut -f2-)
[[ -x "$pg_dump_path" ]] || {printf 'Failed to find pg_dump.n' >&2; exit 1}
pg_dump_bin="${pg_dump_path%/*}"
echo "$pg_dump_bin"
echo "$pg_dump_path"

我正在管道进行排序/头部/切割,以确保您只获得 1 个结果,即该工具的最新安装版本。如果这不是您所需要的全部,请更新您的问题以澄清。

如果您的 find 版本不支持-printf则可以使用:

-exec stat -f $'%at%N' {} ;

而不是:

-printf '%T@t%fn'

以获取文件的时间戳和路径。

相关内容

  • 没有找到相关文章

最新更新