将 bash 函数的结果与 bash 命令一起使用

run*_*ace 0 pipe shell-script

我创建了一个名为的 bash 函数get

get() {
    $(fd -H | fzf)
}
Run Code Online (Sandbox Code Playgroud)

fd就像find,它将找到的所有文件通过管道传输到fzf模糊查找器中,这使我可以找到文件。

我希望能够使用get各种命令,例如echoor ls,但我无法“让它”工作(请原谅双关语),例如

# I am in home dir, and the result from get is 'Documents'
$ ls $(get)
Documents: command not found

$ ls `get`
Documents: command not found

$ echo get | ls
# Just performs ls on current dir not result from get

$ ls get
ls: cannot access 'get': No such file or directory


Run Code Online (Sandbox Code Playgroud)

不知道如何使用我制作的函数,文字不起作用,评估不起作用,管道不起作用,我没有技巧,所以我将问题传递给SO。

Chr*_*own 5

包含在$(不是您想要的:它将尝试使用该管道的输出运行命令。只需删除命令替换即可正常工作:

get() {
    fd -H | fzf
}
Run Code Online (Sandbox Code Playgroud)

然后您可以照常传递给其他命令:

get() {
    fd -H | fzf
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您依赖分词:

foo "$(get)"
Run Code Online (Sandbox Code Playgroud)

顺便说一句,由于文件名可以包含换行符,因此您真正想要的是:

foo $(get)
Run Code Online (Sandbox Code Playgroud)