Как настроить setenv на основе результатов 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
| tr '=' ' ' | 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'`
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
Ты пытался echo -n gnome-keyring-daemon | ...
echo adds a newline