是否有可能创建一个文件,当读取时,它运行一个命令来生成输出?



我想创建一个文件,例如,让它称为/tmp/not_running_pods,当读取cat /tmp/not_running_pods时运行kubectl get pods -o wide | grep -v Running并将输出提供给读取过程。

为了举例,这个用例被简化了。没有真正寻找替代方案,除非它适合这个确切的情况:文件输出没有'服务'总是运行监听阅读器

在搜索中很难找到任何具体的内容。我的本地羡慕是macos,但希望有一些通用的linux/bash/zsh

编辑:终于找到了我脑子里想的东西,比如inetd/super-server -仍然在看这是否适用于这种情况

读取cat/tmp/not_running_podsruns

文件是静态的。它的存在。

HTTP web服务器运行一个PHP脚本(和更多的东西)来生成网页供您查看。SSHD服务器运行一个让你与之联系的躯壳。MYSQL服务器提供一个允许执行查询的特定协议。"做某事";当建立连接时,通常使用套接字-网络,tcp,但也使用文件套接字-允许accept()检测传入的连接并运行

# in one terminal
$ f() { echo new >&2; echo Hello world; LC_ALL=C date; }; export -f f; socat UNIX-LISTEN:/tmp/file,fork SYSTEM:'bash -c f'
new
new
# in the second terminal
$ socat UNIX-CONNECT:/tmp/file -
Hello world
Tue Jul 19 21:29:03 CEST 2022
$ socat UNIX-CONNECT:/tmp/file -
Hello world
Tue Jul 19 21:29:19 CEST 2022

如果您真的想要在读取文件时"执行一个操作",那么您必须创建自己的文件系统来执行该操作。主要的例子是/proc/sys中的文件。对于用户空间文件系统,使用FUSE编写程序。

代替

$ cat /tmp/not_running_pods

just make ~/bin/not_running_pods:

#! /bin/bash
kubectl get pods -o wide | grep -v Running

withchmod 755and do

$ not_running_pods

简单,易于理解,支持良好。