bash - 编写路径随更新而更改的可执行文件
问题描述
我正在寻找一种方法来找到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
这在以我自己的用户身份运行时有效,但我不确定 crontabs 的用户是谁。
解决方案
这可能是您需要的:
pg_dump_path=$(find -L '/usr/local/Cellar/postgresql@10' -type f -name 'pg_dump' -printf '%T@\t%f\n' | 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"
我正在对 sort/head/cut 进行管道处理,以确保您只获得 1 个结果,即该工具的最新安装版本。如果这不是您所需要的,那么更新您的问题以澄清。
如果您的版本find
不支持-printf
,那么您可以使用:
-exec stat -f $'%a\t%N' {} \;
代替:
-printf '%T@\t%f\n'
获取文件的时间戳和路径。
推荐阅读
- c - 结构数据和malloc;没有收到等待的数据
- c# - Unable to set Y Axis Interval On 2nd Chart Area
- dynamics-business-central - Business Central:知道是否安装了扩展
- jupyter-notebook - 如何增加 jupyter notebook 单元的高度
- python - 如何确定python中列表排列的按位和(&)
- python - 无法在 PythonAnywhere 上使用 Selenium
- multithreading - 锁获取和释放
- python - Selenium 无法定位元素
- wordpress - 如何动态限制 wordpress the_excerpt()
- postgresql - 使用 Gorm 查询多对多关系