我的用例:bw unlock 'my password'
输出几行,其中一行以 $ export BW_SESSION="
开头。我想将引号之间的内容保存到一个名为 BW_SESSION 的变量中。
示例 bw unlock
输出:
Your vault is now unlocked!
To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:
$ export BW_SESSION="0d7hzk3i9UaX0Pbq9YlG5VG11ozOGZQ1o304orui1orxHeh7Lk2GIqWCcFN3+hnpMnHqIGjqOlsgQ5tgaI9w1A=="
> $env:BW_SESSION="0d7hzk3i9UaX0Pbq9YlG5VG11ozOGZQ1o304orui1orxHeh7Lk2GIqWCcFN3+hnpMnHqIGjqOlsgQ5tgaI9w1A=="
You can also pass the session key to any command with the `--session` option. ex:
$ bw list items --session 0d7hzk3i9UaX0Pbq9YlG5VG11ozOGZQ1o304orui1orxHeh7Lk2GIqWCcFN3+hnpMnHqIGjqOlsgQ5tgaI9w1A==
我的尝试:
lineWithSessionID=$(bw unlock 'my password' | grep '$ export BW_SESSION="') ;
quotesToSpaces=(${(s/\"/)lineWithSessionID}) ;
splitOnSpaces=(${(s/ /)quotesToSpaces}) ;
BW_SESSION=$splitOnSpaces[4] ;
echo $BW_SESSION
我希望 quotesToSpaces=(${(s/\"/)lineWithSessionID})
能够真正完成这项工作并在引号处拆分一个字符串,但它间歇性地用空格替换引号,并且根本不起作用
答案 0 :(得分:1)
你想得太复杂了:再做一个正则表达式匹配:
if [[ $lineWithSessionID =~ \"(.*)\" ]]
then
BW_SESSION=$match[1]
else
echo Unexpected content: $lineWithSessionID
fi
如果你很勇敢并且真的可以信任输出bw unlock
,你甚至可以做一个
eval $lineWithSessionID[3,-1]
设置 BW_SESSION
并将其放入环境中,但当然伴随着 eval
的所有危险....