Cygwin Bash вызывает ADB с AWK не видит знак доллара $ - PullRequest
0 голосов
/ 25 января 2012

Я запускаю скрипт bash под windows cygwin.

Важное примечание:

Я запускаю скрипт bash из окна command.exe, например:

bash.exe myscript.sh

Скрипт будет выполнять оболочку adb и ps / awk / kill процесс. Андроид рутирован. Сценарий ниже работает, за исключением части awk. Похоже, что что-то в этом окне делает знак доллара в $ 2 недействительным. Так что последняя часть awk не работает. Помогите!

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

Вывод, который я получаю из этого скрипта:

# awk {print }

Ответы [ 2 ]

0 голосов
/ 25 января 2012

При использовании здесь-файла все $ var оцениваются оболочкой как часть обработки.

Я думаю, что вы можете это исправить, просто экранируя любые '$' (для переменных илиshell parms, et), с символом '\', то есть '\ $ 2', и для вашего случая это будет

Edit: В вашем коде есть дополнительное слово, '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 должен не быть заключенным в кавычки.

Надеюсь, это поможет.

PS Добро пожаловать в StackOverflow (SO) Пожалуйста, не забудьте прочитать часто задаваемые вопросы, http://tinyurl.com/2vycnvr, проголосуйте за хорошее Q / A, используя серые треугольники, http://i.imgur.com/kygEP.png, и примите ответ, который решит вашу проблему, если таковой имеется, нажав знак галочки, http://i.imgur.com/uqJeW.png

0 голосов
/ 25 января 2012

Вам нужно будет сделать что-то вроде этого

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

awk утилита принимает данные из канала или из файла. Когда вы делаете echo, а затем команду, оболочка интерпретирует его как обычный текст.

...