shell - 为 fzf 在“fd”结果前加上“~/”。Sed 抱怨“找不到匹配项”
问题描述
我正在尝试在 zsh 中为 fzf 创建一个函数。
我想在 fzf 中列出我的主文件夹下的所有目录和文件,在它们前面加上“~/”,然后最终将我的选择保存在一个变量中。
到目前为止,我有这个:
myVar=$(fd -t d -t f . ~ | xargs realpath --relative-to=$HOME | sed s/^/~\// | fzf)
当我只是在 shell 中运行代码时,它会做我想做的事(除了抱怨xargs: unmatched single quote;...
.
但是,当我将它放入一个函数并获取包含它的文件时,sed 抱怨no matches found: s/^/~//
如何使函数的行为与代码在交互式 shell 中运行时的行为相同?不同行为的原因是什么?
解决方案
zsh
在将结果传递给sed
. 默认情况下,zsh
将不匹配的模式视为错误,而不是像bash
默认情况下那样将其保留为文字字符串。
解决方案是简单地引用您想要zsh
单独留下的内容。
myVar=$(fd -t d -t f . ~ | xargs realpath --relative-to=$HOME | sed "s/^/~\//" | fzf)
推荐阅读
- angular - 如何从 Observable 中提取内容并将其存储在基于键的数组中?
- kubernetes - Kubernetes 1.15+ 中的 Kubelet 指标
- xcode - 是否可以在 ARKit 中使用符号断点?
- ios - 如何将本地 Firestore 日志文件转换为像 json 这样更易读的文件?
- javascript - 记录反转数组
- javascript - 无法在模板中显示值
- javascript - 我无法对只读元素(输入字段)执行操作,Click()或 fillField()都不起作用
- java - Firebase 自动删除记录
- python - 如何按列值的范围将单个数据框拆分为多个数据框?
- python - 在 SeriesGroupBy 上执行 apply() 后,如何“重新组合”我的系列?