shell 我可以有一个可变内容的文件吗?

u5rb5r59  于 2022-12-27  发布在  Shell
关注(0)|答案(2)|浏览(150)

有可能有一个内容可变的文件吗?(这可能是不可能的,但值得一问,因为其他人可能知道一个解决方案。
例如,文件mydate.txt的内容应该始终是这个bash(它可以是任何脚本语言,使用bash只是为了简单)代码段生成的内容:

#!/bin/bash
date

因此,当我尝试查看mydate.txt文件的内容时,它实际上应该显示当前日期。
例如

cat mydate.txt

应显示

Fri Dec 23 09:54:05 AM EET 2022
0lvr5msh

0lvr5msh1#

给出的示例和描述看起来(对我来说)像一个(简单的) Package 函数,用于执行提供的文件...***如果***文件启用了执行权限:

mycat() { for fname in "$@"; do ./"${fname}"; done; }

试驾:

$ mycat mydate.txt
Fri Dec 23 11:02:20 CST 2022

$ mycat mydate.txt mydate.txt mydate.txt
Fri Dec 23 11:21:07 CST 2022
Fri Dec 23 11:21:07 CST 2022
Fri Dec 23 11:21:07 CST 2022
    • 注:**
  • 如果文件没有被标记为可执行文件,那么它会变得(相当)复杂一些(例如,获取一个文件会绕过脚本内容正确"运行"所需的任何shebang;你有权限(重新)设置'执行'位吗?)
  • 虽然这对(相对)简单的例子"有效",但我猜它可能不会在OP的所有情况下都有效,在这种情况下,我们需要更详细的问题描述(和更多的例子)
xzv2uavs

xzv2uavs2#

正如所建议的,最好的答案是使用FIFO(先进先出)文件,可能如下所示:

#!/bin/bash

[ -f "catme.txt" ] && rm catme.txt    # cleanup if needed
mkfifo catme.txt

trap 'rm catme.txt ; exit 1' SIGINT.  # try to clean up the nice way

while true
do
    date > catme.txt
    printf "data provided on %s\n" "`date`"
done

运行命令并使用control-c退出.然后在另一个终端调用cat catme.txt,你会看到我们的当前日期.这可能不是你想要的,但你必须在unix中附加一个动态的进程,否则你可以尝试从其他脚本运行该命令.

相关问题