【问题标题】:Why doesn't the cd command work when trying to pipe it with another command为什么 cd 命令在尝试使用另一个命令进行管道传输时不起作用
【发布时间】:2016-03-25 21:53:50
【问题描述】:

我正在尝试使用带有cdls 的管道,如下所示:

ls -l | cd /home/user/someDir

但什么也没发生。

我试过了:

cd /home/user/someDir | ls -l

似乎cd 命令什么都不做,而ls -l 将在当前目录上工作。

我试图打开的目录是有效的。

这是为什么呢?是否可以使用cd / ls 传递命令? 使用管道时其他命令没有任何问题。

【问题讨论】:

  • cd 不接受输入或生成输出。与它之间的管道是没有意义的。
  • 你知道管道的作用吗?
  • 你的意思不只是ls /home/user/someDir -l。如果您指的是 cd 然后是 ls,这可能是 Shell - Multiple commands in one line 的重复
  • 你期待什么结果?

标签: linux bash pipe ls


【解决方案1】:

cd 不接受输入也不产生输出;因此,在管道中使用它是没有意义的(从左侧命令获取输出并将其作为输入传递给右侧命令)。

你在找ls -l ; cd /somewhere吗?

另一个选项(如果您需要列出目标目录)是:

cd /somewhere && ls -l

如果目标目录不存在,这里的'&&'将阻止执行第二个命令(ls -l)。

【讨论】:

  • 不确定 shell 内置命令如何防止使用管道,例如echo | read。这里的关键点是cd 没有 I/O。
  • 另一个关键点是在管道中运行cd 在子shell 中运行它;它不会影响ls 运行的shell。
猜你喜欢
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 2012-03-27
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多