我一直在尝试从程序输出中读取环境变量的输入,如下所示:
echo first second | read A B ; echo $A-$B
Run Code Online (Sandbox Code Playgroud)
结果是:
-
Run Code Online (Sandbox Code Playgroud)
A和B都是空的.我读到了bash在子shell中执行管道命令,并且基本上阻止了管道输入读取.但是,以下内容:
echo first second | while read A B ; do echo $A-$B ; done
Run Code Online (Sandbox Code Playgroud)
似乎工作,结果是:
first-second
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这里的逻辑是什么吗?是while...... done构造中的命令实际上是在同一个shell中执行echo而不是在子shell中执行?
我正在尝试使用打开文件的相对路径在Vim中保存我的会话.使用cur_dirin sessionoptions,文件的路径将是相对的.当前目录,但会话文件包含cd /path/to/base/directory命令:
...
cd /path/to/base
badd +0 relpath1/file
badd +0 relpath2/file
...
Run Code Online (Sandbox Code Playgroud)
如果我退出curdirsessionoptions,cd命令将消失,但文件路径将是绝对的:
badd +0 /path/to/base/relpath1/file
badd +0 /path/to/base/relpath2/file
Run Code Online (Sandbox Code Playgroud)
有没有办法只有相对路径wrt.什么是创建会话时的当前目录 - 没有插件或编写脚本?这样会话文件只有:
badd +0 relpath1/file
badd +0 relpath2/file
Run Code Online (Sandbox Code Playgroud)
我的最终目标是拥有一个我可以复制的会话文件,例如从SVN结账到另一个.