Cygwin bash 使用 awk 调用 adb 看不到美元符号 $

问题描述 投票:0回答:2

我正在Windows cygwin下运行bash脚本。

重要提示:

我从 command.exe 窗口运行 bash 脚本,例如:

bash.exe myscript.sh

该脚本将执行 adb shell 并 ps/awk/kill 一个进程。安卓已经root了。除了 awk 部分之外,下面的脚本可以工作。似乎在窗口下运行此命令会使 $2 中的美元符号无效。所以 awk 的最后一部分不起作用。救命!

#!/bin/bash     -x      
C:/scripts/adb.exe shell << EOF
su
ls
ps  | grep "myapp" | echo  awk '{print $2}'
EOF

我从这个脚本得到的输出:

# awk {print }
awk cygwin adb
2个回答
0
投票

你必须做这样的事情

ps  | grep "myapp" | awk '{print $2}'

awk
实用程序从管道或文件获取输入。当您执行
echo
后跟命令时,shell 会将其解释为纯文本。


0
投票

使用此处文件时,所有 $var 都会由 shell 在处理过程中进行评估。

我认为你可以解决这个问题,只需使用“”字符(即“$2”)转义任何“$”(用于变量或shell参数等),对于你的情况,它是

编辑:您的代码中有一个额外的单词“echo”,我已将其从下面的解决方案中删除。

#!/bin/bash     -x      
C:/scripts/adb.exe shell << EOF
su
ls
ps  | grep "myapp" | awk '{print \$2}'
EOF

或者您可以通过引用 EOF 来“引用”整个此处文件,即

#!/bin/bash     -x      
C:/scripts/adb.exe shell <<'EOF'
su
ls
ps  | grep "myapp" | awk '{print $2}'
EOF

请注意,收盘 EOF 应该被引用。

© www.soinside.com 2019 - 2024. All rights reserved.