微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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”选项的值。 所以你的命令可能不是可移植的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐