如何在powershell上通过kubectl exec发送一个简单的管道?单个命令和参数工作正常。
在rancher内部的linux和kubectl shell中运行良好:
$> kubectl exec test12-7b7fd6b4f4-wzp59 --namespace=test12 -- dmesg | tail -1
[562119.054019] oom_reaper: reaped process 2410 (supervisorctl), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
kubectl exec
需要取消引用-- dmesg | tail -1
,但是powershell捕获了它:
PS> kubectl exec test12-7b7fd6b4f4-wzp59 --namespace=test12 -- dmesg | tail -1
tail : The term 'tail' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:168
+ ... namespace=test12 -- dmesg | tail -1
+ ~~~~
+ CategoryInfo : ObjectNotFound: (tail:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
如果我引用库贝特尔的话,他抱怨说:
PS> kubectl exec test12-7b7fd6b4f4-wzp59 --namespace=test12 -- "dmesg | tail -1"
OCI runtime exec failed: exec failed: unable to start container process: exec: "dmesg | tail -1": executable file not found in $PATH: unknown
command terminated with exit code 126
命令和参数的作用:
PS> kubectl exec test12-7b7fd6b4f4-wzp59 --namespace=test12 -- ls -l /var/log/lastlog
-rw-rw-r-- 1 root utmp 2920292 Jan 27 09:56 /var/log/lastlog
我发现了这个链接,并尝试了所有这些,甚至停止解析--%
,但没有工作:https://www.octopus.com/blog/powershell-pipe-escaping
一个简单的解决方法是在构建容器时在容器中创建别名:alias ll='dmesg|tail -1'
并将其附加到~./bashrc
2条答案
按热度按时间efzxgjgh1#
感谢@jeroen Mostert的评论,我们可以在powershell中过滤所有的输出,这不是一个完美的解决方案,因为它会将所有的输出拖回powershell,而不仅仅是在容器中将其剪辑掉:
我也不能在linux和powershell中使用相同的命令。如果有人有更聪明的方法,那就太好了:-)
roejwanj2#
如果将pipe封装到sh命令中,它就可以工作:
输出: