如何基于sed结果设置env(对于gnome keyring守护进程)



我的问题

我的核心问题是我需要从c shell启动gnome keyring守护进程。在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_KEY RING_SOCKET/|sed s/GNDOME_KEYRING_PID/\;setenv\GNOME_KEYRING_PID/

我有一个良好的开端:

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

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

无效的null命令。

我对它进行了研究,发现它与一条需要逃跑或移除的换行符有关;然而,即使在为添加了替换命令之后,我仍然会收到错误

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

我在寻找什么

我真的只需要在.cshrc文件中添加任何可以启动gnome keyring守护进程的内容。如果我走错了路,我很乐意听到另一种方法。

谢谢!

我尝试的最后一件事

为了真正简化这一点,我还尝试一次只设置一个变量:

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

这也给了我一个"无效的null命令。"消息,尽管这是有效的:

setenv GNOME_KEYRING_PID `echo '1234'`

感谢@庇护和@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添加换行

最新更新