小编Ada*_*ura的帖子

如何将 find 找到的文件作为参数传递?

首先切断琐碎但不适用的答案:我既不能使用find+xargs技巧也不能使用它的变体(如findwith -exec),因为我每次调用都需要使用很少的这样的表达式。我会在最后回到这一点。


现在有一个更好的例子,让我们考虑:

$ find -L some/dir -name \*.abc | sort
some/dir/1.abc
some/dir/2.abc
some/dir/a space.abc
Run Code Online (Sandbox Code Playgroud)

我如何将这些作为参数传递给program

只是这样做并不能解决问题

$ ./program $(find -L some/dir -name \*.abc | sort)
Run Code Online (Sandbox Code Playgroud)

失败,因为program得到以下参数:

[0]: ./program
[1]: some/dir/1.abc
[2]: some/dir/2.abc
[3]: some/dir/a
[4]: space.abc
Run Code Online (Sandbox Code Playgroud)

可以看出,带有空间的路径被拆分并program认为是两个不同的参数。

报价直到它起作用

似乎像我这样的新手用户,在遇到此类问题时,往往会随机添加引号,直到它最终起作用为止 - 只是在这里似乎没有帮助......

"$(…)"

$ ./program "$(find -L some/dir -name \*.abc | sort)"
[0]: ./program
[1]: some/dir/1.abc
some/dir/2.abc
some/dir/a space.abc
Run Code Online (Sandbox Code Playgroud)

由于引号可防止分词,因此所有文件都作为单个参数传递。

引用个别路径

一个有前途的方法:

$ ./program $(find -L some/dir …
Run Code Online (Sandbox Code Playgroud)

command-line bash find arguments

9
推荐指数
1
解决办法
8631
查看次数

如何在名称服务切换 (NSS) 中多次使用同一个库

是否有任何通用解决方案可以两次(或多次)使用单个 NSS 库?

就我而言,我有两台 LDAP 服务器,一台在机器上本地,另一台远程。我需要让 NSS 与它们一起工作(如果本地没有必需的条目,它会使用远程的)。

目前它已解决,因此单个库(PADL/nss_ldap)被构建两次。在这两种情况下,构建之前sed都用于将nss_ldap源中的所有出现更改为其他内容。对于每种情况,使用不同的文本(如nss_ldap_1nss_ldap_2)。构建结果被相应地重命名。两个二进制文件都存储在目标系统上并在/etc/nsswitch.conf.

此外,这两个库都使用不同的配置文件/etc/(否则就没有任何意义!)。然而,这只需configure在构建之前更改库运行脚本中的参数即可轻松完成。

但它“感觉不对”。还有其他方法吗?

我可以想象的是,NSS 库本身可以支持多种配置,因此它可以作为两个“单个实例”工作。但是,如果您不是该库的作者,这很难实现。此外,它需要为两种配置随后调用库,而人们可能更喜欢在两者之间使用其他库。

另一种方法是编写一个简单的转发器,它只调用具有不同配置的其他库。但这再次要求其他库以某种方式可重新配置(如果它只使用/etc转发器中的一些固定配置文件,它将像第一个版本一样工作)。而且它只工作一次 - 让一个库使用三次或更多次,现在转发器本身会返回相同的问题。

nsswitch

8
推荐指数
1
解决办法
318
查看次数

标签 统计

arguments ×1

bash ×1

command-line ×1

find ×1

nsswitch ×1