【发布时间】:2019-08-04 02:54:33
【问题描述】:
我试图将一个命令的输出传递给另一个命令,但没有成功。
我尝试将目录中的所有.yaml 文件列出到一个逗号分隔的字符串中,并将结果传递给另一个命令。
这是我目前得到的:
我正在使用这个命令:
ls *.yaml -p | grep -v / | tr '\n' ','
列出所有创建为逗号分隔的文件,输出如下:
api-pod.yaml,login-pod.yaml,mongo-pod.yaml,web-pod.yaml,
(注意后面有命令)
现在,我需要将此输出传递给kubectl apply -f 命令
kubectl apply -f (the output)
到目前为止我已经尝试过:
- kubectl apply -f $(ls *.yaml -p | grep -v / | tr '\n' ',')
- kubectl 应用 -f
ls *.yaml -p | grep -v / | tr '\n' ',' - for /F "usebackq delims=" %A in (
ls *.yaml -p | grep -v / | tr '\n' ',') 做 kubectl apply -f %A
但没有一个对我有用。我已经尝试过cmd 和 bash(Windows 上的MINGW64)
可以在 Linux (bash) 和 Windows (cmd) 中运行的解决方案会很棒,但如果不存在,我将使用基于 Linux 的解决方案。
谢谢!
编辑:(也许)重要的是要注意我从 Makefile 运行命令
kompose:
# this will generate all the .yaml files
kompose convert
# this doesn't work for me
kubectl apply -f "$(ls *.yaml -p | tr '\n' ',')"
# this doesn't work for me either
kubectl apply -f "$(find . -maxdepth 1 -name "*.yaml" -type f -printf "%f,")"
并使用make kompose 运行它
另一个编辑:
运行 @RicoChen 解决方案直接在 MINGW 中为我工作,但不适用于 Makefile(如果有人知道为什么会受到赞赏)
我相信你们提到的所有解决方案都可以在真正的 linux bash 中完美运行。这也是在 MINGW 中工作的唯一解决方案。
另一个编辑: 尝试了 CygWin 提供的所有解决方案。没有人工作。来自 Makefile 或直接在 CygWin 中。
(希望)最后一次编辑:
这是直接在 MINGW 中为我工作的命令:kubectl apply -f $(ls -m *.yaml | tr -d ' ')(@RicoChen 的解决方案)
当我尝试从 Makefile 运行它时:(在 MINGW 中使用 make kompose)
.PHONY: kompose
kompose:
kompose convert
kubectl apply -f $(ls -m *.yaml | tr -d ' ')
由于某种原因它不起作用。
【问题讨论】:
-
为什么需要
grep -v /?您是否希望目录名称以.yaml结尾? -
@CharlesDuffy 好问题!不。我不期待。所以我想
ls *.yaml -p | tr '\n' ','就足够了。谢谢! -
“来自一个makefile”改变了很多东西很多;你应该把它标记为一个make问题(实际上,因为你已经得到了几个答案,所以这么晚才添加那个主要的细节可能是不合适的;最好接受任何在makefile之外正常工作的答案,然后问一个新问题这是关于 makefile 案例的明确说明)。
-
@CharlesDuffy 没有太大变化。直接运行此命令:来自 MINGW 的
kubectl apply -f "$(ls *.yaml -p | tr '\n' ',')"会导致错误:error: the path "" does not exist。运行:kubectl apply -f "$(ls *.yaml -p | tr '\n' ',')"导致相同的错误