syed@Emad-World:~$ date | cut --delimiter=" " --fields=1 > date.txt | cat date.txt
syed@Emad-World:~$
Канал оболочки (|
) конструкция для соединения стандартного вывода одного процесса к стандартному входу другого.
В Вашем случае Вы перенаправляете стандартный вывод cut
управляйте в файл (> date.txt
), и не читая стандартный вход вообще (так как Вы передаете аргумент имени файла, date.txt
, к cat
команда). Соответствующие соединения оболочки в этом случае:
&&
в котором cat date.txt
будет выполняться условно, в зависимости от успешного статуса выхода предыдущих команд в конвейереили
;
в этом случае cat date.txt
будет выполняться безусловноВ этом случае, &&
является, вероятно, более соответствующим (мы не попытаемся читать из date.txt
если мы не могли записать в него, например). Так
date | cut --delimiter=" " --fields=1 > date.txt && cat date.txt
Если Вы просто не играете с каналами, можно избежать cut
путем сообщения date
производить только сокращенное дневное имя непосредственно:
date +%a > date.txt && cat date.txt
Вы могли бы задаться вопросом почему date | cut --delimiter=" " --fields=1 > date.txt | cat date.txt
не работает во всяком случае - так как это синтаксически корректно. Причина этого состоит в том, что Вы не можете полагаться на порядок выполнения LHS и RHS канала - так cat date.txt
должен, скорее всего, быть выполнен, прежде чем вывод команды даты был записан в него.
Это ожидало поведение, когда Вы ничего не передадите по каналу.
$ date | cut --delimiter=" " --fields=1 > date.txt | cat date.txt
$
Дата возвращает строку, которую Вы нарубили и затем пишете одно слово в newfile. Создание newfile не имеет никакого вывода на STDOUT, таким образом, ничто не передается по каналу кошке.