Linux shell脚本编程基础:制作一个命令行工具,执行一个命令来执行几个

时间:2014-04-03 18:21:06

标签: 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."
        )

感谢。

1 个答案:

答案 0 :(得分:1)

由于括号中有部分shell语法,而不是自己的命令,你必须这样做:

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

根据您的确切命令集,必要的引用/转义可能是一个轻微的额外挑战,但如果这太难了,那么只需将命令放在正确的shell脚本中,然后调用它而不是{ {1}}语法。

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

bash -c ...