我试图在运行Linux的openshift停靠容器中的Windows机器上运行以下命令
oc exec openjdk-app-1-l9nrx -i -t --server https://xxx.cloud.ibm.com:30450 \
--token <token> -n dev-hg jcmd \
$(ps -ef | grep java | grep -v grep | awk '{print $2}') GC.heap_dump \
/tmp/heap1.hprof它试图在本地windows机器上计算jcmd $(ps -ef \ grep \ grep -v -v grep \ awk '{print $2}') GC.heap_dump /tmp/heap1.hprof,而我没有linux命令。另外,我需要在容器中运行的应用程序的进程ID,而不是本地的。
任何快速的帮助都是非常感谢的。
发布于 2020-08-16 01:20:34
试试这个:
oc exec -it openjdk-app-1-l9nrx --server https://xxx.cloud.ibm.com:30450 \
--token <dont-share-your-token> -n dev-hg -- /bin/sh -c \
"jcmd $(ps -ef | grep java | grep -v grep | awk '{print \$2}')"甚至:
oc exec -it openjdk-app-1-l9nrx --server https://xxx.cloud.ibm.com:30450 \
--token <dont-share-your-token> -n dev-hg -- /bin/sh -c \
"jcmd $(ps -ef | awk '/java/{print \$2}')"发布于 2020-08-17 03:55:05
问题是,$( )部分是在本地解释的。用双引号包围它不会有帮助,因为这种语法是在双引号中解释的。
您必须用单引号替换双引号(因此$( )不会被解释),然后补偿awk单引号:
oc exec openjdk-app-1-l9nrx -i -t --server https://xxx.cloud.ibm.com:30450 --token TOKEN -n dev-hg 'jcmd $(ps -ef | grep java | grep -v grep | awk '\''{print $2}'\'') GC.heap_dump /tmp/heap1.hprof'
请将标签unix和shell添加到您的问题中,因为这更像是一个UNIX问题,而不是Openshift问题。
https://stackoverflow.com/questions/63320449
复制相似问题