gpt4 book ai didi

Linux shell脚本编程基础 : making a command-line tool that executes a command to execute several

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:46 25 4
gpt4 key购买 nike

使用命令行工具 flock 的示例。
该文档仅定义了语法:

flock [options] <file> -c <command>

但是-c好像不是强制的。如果可以锁定文件('-n' 开关禁用等待锁定文件释放)​​,此行将执行程序:

flock -n lockfile.lck echo "File is Locked"

相反,我想编写如下脚本:

flock -n $TMP/lockfile.lck (
echo "Congratulations:"
echo "you have acquired the lock of the file"
)

如您所见,它几乎相同,但执行多于一行
可能吗?

并且,对于无法锁定的情况:

flock -n lockfile.lck echo "Lock acquired" || echo "Could not acquire lock"

我想知道它是否可以像这样实现:

flock -n $TMP/lockfile.lck (
echo "Congratulations:"
echo "you have acquired the lock of the file"
) || (
echo "How sad:"
echo "the file was locked."
)

谢谢。

最佳答案

由于圆括号是 shell 语法的一部分,而不是命令本身,因此您必须执行如下操作:

flock -n lockfile.lock bash -c '( command list )'

根据您的确切命令集,必要的引用/转义可能是一个额外的挑战,但如果这变得太难了,那么只需将您的命令放在适当的 shell 脚本中,然后调用它而不是 bash -c ... 语法。

编辑:事实上,以这种方式使用 shell,命令分组不再需要括号(实际上由于生成额外的子 shell 会降低效率),所以这就足够了:

flock -n lockfile.lock bash -c 'command list'

关于Linux shell脚本编程基础 : making a command-line tool that executes a command to execute several,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com