我正在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 }
你必须做这样的事情
ps | grep "myapp" | awk '{print $2}'
awk
实用程序从管道或文件获取输入。当您执行 echo
后跟命令时,shell 会将其解释为纯文本。
使用此处文件时,所有 $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 应该不被引用。