如何根据sed结果进行setenv(对于gnome-keyring-daemon)

时间:2012-03-21 19:05:52

标签: csh setenv gnome-keyring-daemon

我的问题

我的核心问题是我需要从c shell启动gnome-keyring-daemon。在bash中,这很容易:

> export `gnome-keyring-daemon`

相当于:

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

我的目标是在c shell中获得相同的功能,但我的命令行技能无法完成任务。

我尝试过什么

如果我跑

  

echo 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

尽管我可以将该输出复制并粘贴到命令行并使其工作,但如果我将该语句括在tick中以使其在一行上工作,我会收到以下错误:

  

无效的空命令。

我对它进行了研究,发现它与需要转义或删除的newline sneaking in有关;但是,即使在为\ 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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您是否尝试过echo -n gnome-keyring-daemon | ... echo添加换行符