是否可以使用 cd 命令进行管道传输

是否可以使用 cd 命令进行管道传输

是否可以通过管道传输 cd 命令?

例如,我想进入一个目录,然后对其内容使用文件命令,但是当我键入时,cd x | file *它只会对我当前目录执行文件命令,而根本不会改变目录。

答案1

管道获取一个命令的输出并将其用作另一个命令的输入。因此,您尝试的操作存在两个问题。

  1. cd命令不会产生任何输出1
  2. file *不接受任何输入。你可能会说,“当然需要输入;它会读取所有文件(的一部分)。”但它不会读取标准输入。  如果您输入file *,它只会运行并给您输出;它不会从键盘读取任何内容。

您想要的是,先执行,然后执行。cd x; file *cdfile *

您可能已经意识到,该命令行将离开你 在目录中x  另一种选择是

(光盘X; 文件 *)

它在子 shell 中运行cdfile。主 shell 的工作目录不会改变。这样做的缺点是,如果命令行设置任何 shell 变量或以其他方式更改 shell 的状态,这也只会影响子 shell 而不会影响主 shell。

弗兰克·托马斯在评论中指出,这是一个有点幼稚和草率的答案。如果命令 失败,它将在当前目录中cd运行。更好的答案是,你可以将其读作“file *cd x && file *cd x 进而执行”。仅当第一个命令 ( ) 成功时file *,才会执行第二个命令 ( ) 。此外,如果目录包含任何以 开头的文件,则更 安全的做法是使用 或而不是 ,file *cd xfile -- *file ./*file *-

________________
1 嗯,有时它会输出目录名称。

相关内容