Почему cat date.txt не показывает вывод

syed@Emad-World:~$ date | cut --delimiter=" " --fields=1 > date.txt | cat date.txt
syed@Emad-World:~$ 
1
задан 27 July 2019 в 15:01

2 ответа

Канал оболочки (|) конструкция для соединения стандартного вывода одного процесса к стандартному входу другого.

В Вашем случае Вы перенаправляете стандартный вывод 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 должен, скорее всего, быть выполнен, прежде чем вывод команды даты был записан в него.

3
ответ дан 3 December 2019 в 06:36

Это ожидало поведение, когда Вы ничего не передадите по каналу.

$ date | cut --delimiter=" " --fields=1 > date.txt | cat date.txt
$

Дата возвращает строку, которую Вы нарубили и затем пишете одно слово в newfile. Создание newfile не имеет никакого вывода на STDOUT, таким образом, ничто не передается по каналу кошке.

2
ответ дан 3 December 2019 в 06:36

Другие вопросы по тегам:

Похожие вопросы: