Это достаточно распространенное, но не универсальное соглашение Un * x.(Это упомянуто в спецификации POSIX, и поэтому большинство Unix-систем Unix также будет поддерживать его.)
Важная деталь здесь заключается в том, что опция kubectl ... -f
ожидает имя файла .Если у вас есть файл с именем x.yaml
, более прямой способ написать то, что вы показали, это просто
kubectl replace -f x.yaml
Где вы говорите -f -
, что якобы означает «файл с именем -
»., но kubectl
(наряду со многими другими инструментами) фактически интерпретирует это как «стандартный ввод процесса».Например, вы могли бы использовать это для очень легкой системы шаблонов, например
sed 's/TAG/1.2.3-20190103/g' x.yaml | kubectl replace -f -
Для инструментов Un * x в целом POSIX.1 заявляет , что для многих команд
... операнд, именующий файл, может быть указан как '-', что означает использование стандартного ввода вместо именованного файла ....
Некоторые командык этой поддержке относятся cat , grep , sort и tar (не требуется для POSIX).Например, один из способов перемещения дерева каталогов между двумя компьютерами Linux - это создать файл tar на stdout, направить поток через ssh на удаленный компьютер, а затем распаковать файл tar из stdin:
tar cf - . | ssh elsewhere tar xf - -C /other/dir
xargs - это инструмент, который преобразует (чаще всего) список имен файлов при стандартном вводе в аргументы командной строки.Например, find (1) может напечатать список совпадающих имен файлов на его стандартный вывод, чтобы вы могли построить конвейер для удаления файлов резервной копии оболочки, например
find . -name '*~' | xargs rm
.используйте это с Kubernetes;ваш пример пытается передать сам контент YAML в качестве аргументов командной строки, например, в kubectl
.Вы можете применить kubectl
к дереву каталогов с помощью чего-то вроде
find . name '*.yaml' | xargs -n1 kubectl apply -f
, но поскольку kubectl ... -f
также поддерживает имена каталогов (не универсальное соглашение), вы можете сделать то же самое большепрямо как
kubectl apply -f . # where . is the current directory