是否可以通过管道传输 cd 命令?
例如,我想进入一个目录,然后对其内容使用文件命令,但是当我键入时,cd x | file *
它只会对我当前目录执行文件命令,而根本不会改变目录。
答案1
管道获取一个命令的输出并将其用作另一个命令的输入。因此,您尝试的操作存在两个问题。
- 该
cd
命令不会产生任何输出1。 file *
不接受任何输入。你可能会说,“当然需要输入;它会读取所有文件(的一部分)。”但它不会读取标准输入。 如果您输入file *
,它只会运行并给您输出;它不会从键盘读取任何内容。
您想要的是,先执行,然后执行。cd x; file *
cd
file *
您可能已经意识到,该命令行将离开你
在目录中x
。 另一种选择是
(光盘X; 文件 *)
它在子 shell 中运行cd
和file
。主 shell 的工作目录不会改变。这样做的缺点是,如果命令行设置任何 shell 变量或以其他方式更改 shell 的状态,这也只会影响子 shell 而不会影响主 shell。
弗兰克·托马斯在评论中指出,这是一个有点幼稚和草率的答案。如果命令 失败,它将在当前目录中cd
运行。更好的答案是,你可以将其读作“file *
cd x && file *
cd x
进而执行”。仅当第一个命令 ( ) 成功时file *
,才会执行第二个命令 ( ) 。此外,如果目录包含任何以 开头的文件,则更 安全的做法是使用 或而不是 ,file *
cd x
file -- *
file ./*
file *
-
。
________________
1 嗯,有时它会输出目录名称。