我正在寻找一种方法来在更改其路径的更新中找到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'
以获取文件的时间戳和路径。