(cd $1 ; tar -cf - . ) | (cd $2 ; tar -xvf - )
当我运行它时,主shell应该创build两个进程(子壳)同时执行两组命令。 但是,shell如何确保两个进程都转换到合适的目录,然后将进程的内容打包并发送到第二个进程进行解包?
为什么没有竞争条件? 是否每个进程的每个命令都会按顺序执行,尽pipe进程可以并行?
即第一个进程运行“cd $ 1”,然后第二个进程运行“cd $ 2”(或者它应该与第一个进程同时执行?不确定),那么第一个进程会把所有东西打包,最后发送到第二个进程。
redirect从www域到根域 – 工作,但不完全正确
捕获的数据包长度超过MTU
如何在C中捕获过程输出?
虽然,我不知道关于焦油的一件小事:
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”选项的值。 所以你的命令可能不是可移植的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。