gpt4 book ai didi

linux - Linux shell 中的命令组

转载 作者:太空狗 更新时间:2023-10-29 11:39:37 24 4
gpt4 key购买 nike

假设我有这个 shell 脚本调用 cpdir:

(cd $1 ; tar -cf - . ) | (cd $2 ; tar -xvf - )

当我运行它时,主 shell 应该创建两个进程(子 shell)来同时执行两组命令。然而,shell如何确保两个进程都更改到适当的目录,然后第一个进程将目录的内容打包并发送给第二个进程进行解包?

为什么没有竞争条件?尽管进程可以并行,但每个进程的每个命令都会按顺序执行吗?

即第一个进程将运行“cd $1”,然后第二个进程将运行“cd $2”(或者它应该与第一个进程同时执行?不确定),然后第一个进程将打包所有内容并最终发送到第二个进程。

虽然,关于 tar 我不知道的一件小事:

tar -cf - .

我知道点(.)是当前目录的内容。但是,命令中的“-”是什么?

最佳答案

您不需要使用 cd,因为 tar 有一个 -C 选项,它告诉它切换到一个目录。所以你可以简单地使用一个命令,例如:

tar -C $1 -cvf - . | tar -C $2 -xvf -

- 表示标准输入/标准输出。第一个连字符告诉 tar 写入标准输出。第二个告诉 tar 从 stdin 读取。

因为 - 是默认的,你甚至不需要指定它。您可以将命令缩短为:

tar -C $1 -c . | tar -C $2 -x

关于linux - Linux shell 中的命令组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6979498/

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