Linux shell中的命令组

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

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

当我运行它时,主shell应该创build两个进程(子壳)同时执行两组命令。 但是,shell如何确保两个进程都转换到合适的目录,然后将进程的内容打包并发送到第二个进程进行解包?

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

即第一个进程运行“cd $ 1”,然后第二个进程运行“cd $ 2”(或者它应该与第一个进程同时执行?不确定),那么第一个进程会把所有东西打包,最后发送到第二个进程。

平均使用shell脚本或awk后两个文件间的差异

redirect从www域到根域 – 工作,但不完全正确

捕获的数据包长度超过MTU

如何在C中捕获过程输出

目标目录名称中带有“ – =”的cd命令错误

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

tar -cf - .

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

什么更好:selectvs线程?

“ulimit -v”如何在Linux操作系统中工作?

为什么我得到未定义的参考pthread_mutexattr_settype?

如何在不重新编译Linux内核的情况下实现自己的系统调用

SNMP陷阱,必需的OID:sysuptime和id

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

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

-意味着标准输入/标准输出。 第一个连字符告诉tar写入标准输出。 第二个告诉tar从标准输入读取。

由于-是认值,所以您甚至不需要指定它。 您可以缩短您的命令:

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

由于这些组在独立进程中运行,哪个cd命令首先运行并不重要:每个进程都有自己的工作目录。

所以改变工作目录不会影响其他进程。

你正在管道你的情况下的命令。 你期待的结果对我来说不是很清楚。 顺便说一下,我的GNU tar没有“ – ”这个“-f”选项的值。 所以你的命令可能不是可移植的。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....