【问题标题】:Script an Executable Whose Path Changes with Updates编写路径随更新而更改的可执行文件
【发布时间】:2019-11-04 09:17:16
【问题描述】:

我正在寻找一种在更改其路径的更新中找到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 的用户是谁。

【问题讨论】:

    标签: bash path cron homebrew


    【解决方案1】:

    这可能是你需要的:

    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'
    

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

    【讨论】:

    • find: -executable: unknown primary or operator 我在 El Capitan,所以find 最近可能会更新。
    • 然后删除该测试。这不是绝对必要的。我从我的答案中删除了它。
    • find: -executable: unknown primary or operator /users/rich/RF/RF_scripts/crons/pg_neb_daily_backupto_Dragon2.sh: line 41: {printf: command not found /users/rich/RF/RF_scripts/crons/pg_neb_daily_backupto_Dragon2.sh: line 41: exit: 1}: numeric argument required
    • pg_dump_path=$(find '/usr/local/Cellar/postgresql@10' -type f -name 'pg_dump' -printf '%T@\t%f\n' | sort -nr | head -1 | cut -f2-)
    • @Rich_F 如果您的find 不支持-printf,那么您可以使用-exec stat {} \; 来代替stat 的一些选项,但如果您只能找到pg_dump 的1 个版本那么你可以摆脱-printf '%T@\t%f\n' | sort -nr | head -1 | cut -f2-。是这样吗?如果您可以找到多个版本但不在乎哪个版本,那么您可以用| head -1 替换该命令链。
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多