首页 > 解决方案 > BASH:将查找命令的值打印到某个点并分配给一个变量

问题描述

我试图分两步定义一个变量-

$ find /u01/app -name cmd_history.txt

它返回类似的东西(例如)

/u01/app/refresh/db/18c/test/etc/cmd_history.txt

$ export WORK_DIR=/u01/app/refresh/db/18c/test/etc (不包括 /cmd_history.txt)

基本上,我想在 1 个命令中实现这一点,即将 find 的输出提供给 awk 或剪切并省略 /cmd_history.txt。

$ export WORK_DIR=find /u01/app -name cmd_history.txt | awk or cut 

我怎样才能做到这一点?

标签: bashscripting

解决方案


使用 GNU find

您可以使用 打印前导目录并在第一次匹配后-printf '%h'退出。find-quit

export WORK_DIR=$(find /u01/app -name 'cmd_history.txt' -printf '%h' -quit)

使用 BSD find

打印第一个匹配项,然后退出并使用dirname.

export WORK_DIR=$(dirname "$(find /u01/app -name 'cmd_history.txt' -print -quit)")

推荐阅读