Как установить env на основе результатов sed (для gnome-keyring-daemon)

Моя проблема

Моя основная проблема заключается в том, что мне нужно запустить демон gnome-keyring-daemon из оболочки c. В bash это довольно просто:

> export `gnome-keyring-daemon`

что эквивалентно:

> export GNOME_KEYRING_SOCKET=/tmp/0123.1.sds/keyring-abcdef/socket GNOME_KEYRING_PID=012345

Моя цель - получить ту же функциональность в оболочке c, но мои навыки работы с командной строкой не подходят для этой задачи.

Что я пробовал

Если я побегу

эхо gnome-keyring-daemon | тр '=' ' ' | sed s/GNOME_KEYRING_SOCKET/setenv\ GNOME_KEYRING_SOCKET/ | sed s/GNOME_KEYRING_PID/\;setenv\ GNOME_KEYRING_PID/

У меня хорошее начало:

setenv GNOME_KEYRING_SOCKET /tmp/0123.1.sds/keyring-abcdef/socket ;setenv GNOME_KEYRING_PID 012345

Несмотря на то, что я могу скопировать и вставить этот вывод в командную строку и заставить его работать, если я заключаю этот оператор в тики, чтобы заставить его работать в одной строке, я получаю следующую ошибку:

Недопустимая нулевая команда.

Я изучил его и обнаружил, что он связан с новой строкой, которая должна быть сбежал или удален; однако я все еще получаю сообщение об ошибке даже после добавления команд замены для \r и \n следующим образом:

> | tr '\r' ' ' | tr '\n' ' ' |

Что я ищу

Мне действительно просто нужно что-нибудь, что я могу добавить в свой файл .cshrc, который запустит демон gnome-keyring-daemon. Если я на неправильном пути, я был бы рад услышать альтернативный подход.

Спасибо!

Одна последняя вещь, которую я попробовал

Чтобы действительно упростить это, я также попытался просто установить одну переменную за раз:

setenv GNOME_KEYRING_PID `echo -n `gnome-keyring-daemon` | sed 's/.*GNOME_KEYRING_PID=\([0-9]\+\)/\1/'`

Что также дает мне «Неверную нулевую команду». сообщение, несмотря на то, что это работает:

setenv GNOME_KEYRING_PID `echo '1234'`

person Michael La Voie    schedule 21.03.2012    source источник
comment
Не знаю, что сказать о нулевой команде, но вы можете связать все элементы sed в один вызов, возможно, уменьшив количество мест для нулевых команд ;-) . т. е. echo gnome-keyring-daemon | sed 's/=//;s/GNOME_KEYRING_SOCKET/setenv GNOME_KEYRING_SOCKET/; s/GNOME_KEYRING_PID/;setenv GNOME_KEYRING_PID/' Хм, давно я не занимался сложными вещами csh. возможно, нуль вставляется при обработке обратной кавычки, поэтому добавление tr '\r' '' и т. д. не решит эту проблему. Кроме того, вы уверены, что код работает, не уверены, что кто-либо/все tr знают о '\ r', поэтому попробуйте восьмеричный, то есть '\015'. Удачи.   -  person shellter    schedule 21.03.2012
comment
хорошо, в вашем последнем блоке, вы действительно имели в виду, что обратная кавычка echo -n обратная кавычка и т. д.? Когда вы используете отступ в четыре пробела для получения «форматирования кода», вам не нужно добавлять обратные кавычки для форматирования. То, что я вижу сейчас, говорит: «замена команды для echo -n» (с использованием обратных галочек), string = gnome-key-ring-daemon 'command sub для | sed ...' Вам просто нужен 1 набор обратных тиков в этой командной строке, верно? (Я знаю, что это трудно заставить работать прямо в редакторе). Удачи.   -  person shellter    schedule 21.03.2012


Ответы (2)


Спасибо @shelter и @gbulmer за вашу помощь. Я действительно ненавижу отвечать на свой вопрос, но это может помочь кому-то в будущем...

В конце концов я обновил свой сценарий C Shell, чтобы установить переменные в нескольких отдельных строках:

set gkd = `gnome-keyring-daemon`

set pid = `echo $gkd |  sed 's/.*GNOME_KEYRING_PID=\([0-9]\+\)/\1/'`
set socket = `echo $gkd | sed 's/GNOME_KEYRING_SOCKET=\([^ ]\+\).\+/\1/'`
setenv GNOME_KEYRING_PID $pid
setenv GNOME_KEYRING_SOCKET $socket
person Michael La Voie    schedule 23.03.2012

Вы пробовали echo -n gnome-keyring-daemon | ... echo добавить новую строку

person gbulmer    schedule 21.03.2012
comment
Хорошее предложение, я пробовал, но не повезло. Я думаю, что gnome-keyring-daemon может иметь новую строку внутри, но также возможно, что моя команда Invlaid null. сообщение не имеет ничего общего с новыми строками, это просто мое лучшее предположение. - person Michael La Voie; 21.03.2012
comment
Я обновил свой пост еще более простым примером того, что не удается - person Michael La Voie; 21.03.2012
comment
Спасибо @gbulmer, я дал вам +1 за совет -n. Хорошая идея! - person Michael La Voie; 28.03.2012