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

标签 linux shell scripting

使用命令行工具 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/

相关文章:

linux - 从命令行参数使用 bash 脚本复制多个文件?

bash - 使用 shell 脚本处理处理制表符分隔文件

linux - 使用 --enable-compat15 编译 nfdump

linux - CSHTML 未在 mod_mono/mono3.2.5 下呈现

c - 从 C 启动新的 shell

bash - 在 shell 脚本中获取 2 个数组中的公共(public)值

linux - 创建一个较短版本的 bash 命令

linux - 计算 shell 脚本每一步的时间并显示总执行时间

linux - CentOS 6.5 如何让新文件继承父文件夹所有权?

linux - 服务器崩溃或者只是调用 `shutdown(fd, SHUT_WR)` ?