LINUX.ORG.RU

[java] Выполнить shell команду с одинарными кавычками

 


0

0

Надо выполнить shell команду awk NR==4'{print$1}' /sys/*** всяко пробовал, никак не получатся:

Runtime.getRuntime().exec(«awk NR==4'{print$1}' /sys/***»);
Runtime.getRuntime().exec(«awk NR==4\'{print$1}\' /sys/***»);
Runtime.getRuntime().exec(«awk NR==4\u0027{print$1}\u0027 /sys/***»);
Runtime.getRuntime().exec(new String[] {«busybox»,«awk»,«NR==4'{print$1}'»,«/sys/***»});
Runtime.getRuntime().exec(new String[] {«busybox»,«awk»,«NR==4\'{print$1}\'»,«/sys/***»});
Runtime.getRuntime().exec(new String[] {«busybox»,«awk»,«NR==4\u0027{print$1}\u0027»,«/sys/***»});


Ответ на: комментарий от anonymous

не работает. Зависает на этой строке, вероятно из-за того, что нет пробела перед /sys/***. Пробовал так:

new String[] {«busybox», «awk», «\„NR==4'{print$1}'\“»,«/sys/***»}

но и оно не работает.

tr0ll
() автор топика

У меня твоя команда при запуске из шелла ошибку выдает:

$ awk NR==4'{print$1}' /sys/***
awk: read error (Is a directory)
$ echo /sys/***
/sys/block /sys/bus /sys/class /sys/dev /sys/devices /sys/firmware /sys/fs /sys/kernel /sys/module /sys/power

Ты чего именно хотел сделать?

Но если у тебя не выдает, попробуй, что ли, так:

Runtime.getRuntime().exec("bash -c awk NR==4'{print$1}' /sys/***");

proud_anon ★★★★★
()
Ответ на: комментарий от anonymous

Надо выполнить shell команду awk NR==4'{print$1}' /sys/*** всяко пробовал, никак не получатся:

вопрос может глупый, но разве (по правилам Shell) --

awk NR==4'{print$1}' /sys/***

-- не тоже самое что и --

awk NR==4{print\$1} /sys/***

(убрал ковычки <'> и поставил <\> перед <$> ... хотя по правилам Java — даже этот <\> будет лишним)

???

если так — то неудевительно что это не работает --

Runtime.getRuntime().exec(new String[] {«busybox»,«awk»,«NR==4'{print$1}'»,«/sys/***»});

((( ну а дальше мне следует поварчать о том что Shell это не обычный php-подобный язык программирования.. там немного свои правила...)

mkfifo
()
Ответ на: комментарий от proud_anon

> Ты чего именно хотел сделать?
Мне просто надо вывести n строку n столбца определенного файла, sys подставил для примера.

Runtime.getRuntime().exec(«bash -c awk NR==4'{print$1}' /sys/***»);

выдает null

tr0ll
() автор топика
Ответ на: комментарий от mkfifo

Runtime.getRuntime().exec(«busybox bash -c awk NR==4{print\\$1} /sys/***»);
выдает bash: applet not found

Runtime.getRuntime().exec(new String[] {«busybox»,«awk»,«NR==4{print\\$1}»,«/sys/***»});
Runtime.getRuntime().exec(new String[] {«busybox»,«awk»,«NR==4{print\\$1} /sys/***»});
выдает line:1: Unexpected token

tr0ll
() автор топика
Ответ на: комментарий от tr0ll

>Мне просто надо вывести n строку n столбца определенного файла, sys подставил для примера.

Если sys только для примера, может, лучше поставить абсолютный путь к конкретному файлу какому-нибудь? А то регэкспы-то ведь шелл парсит, это усложняет картину.

Или ты уже подставил и не работает?

Runtime.getRuntime().exec(«bash -c awk NR==4'{print$1}' /sys/***»);

выдает null


Кто выдает null? awk, что ли? Или это exec тебе null вернул (а как он это сделал??).

proud_anon ★★★★★
()
Ответ на: комментарий от mkfifo

> но разве (по правилам Shell) ---- не тоже самое что и --

(фигурные) скобки тоже нужно экранировать

dilmah ★★★★★
()
Ответ на: комментарий от proud_anon

> Если sys только для примера, может, лучше поставить абсолютный путь к конкретному файлу какому-нибудь? А то регэкспы-то ведь шелл парсит, это усложняет картину.
Ок, давайте использовать конкретный файл /proc/cpunfo, положим мне надо получить значение vendor_id (вторая строка, третий столбец).

Или ты уже подставил и не работает?

Естственно поодставил

Кто выдает null?

exec

Вот полный код, может так будет яснее http://paste.org.ru/?5fyrc4

tr0ll
() автор топика
Ответ на: комментарий от tr0ll

Ёшкин кот, доперло!

Runtime.getRuntime().exec("awk NR==2{print$1} /proc/cpuinfo");

Там кавычки одинарные не нужны. При вызове из шелла шелл их интерпретирует и убирает, а тут он не работает. Кавычки остаются, awk ругается.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

Работает! Всем огромное спасибо.

tr0ll
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.