我有一个C ++程序,该程序最终根据用户输入的索引打印目录路径。
body {
display: flex;
}
fieldset {
margin: 0 0 16px;
}
[type="reset"] {
float: right;
}
但是你不能用bash书写
<form>
<fieldset>
<legend>Full Name</legend>
<input name="name">
</fieldset>
<fieldset>
<legend>Address</legend>
<input name="address">
</fieldset>
<fieldset>
<legend>Email</legend>
<input name="email" type="email">
</fieldset>
<button type="submit">Submit</button>
<button type="reset">Reset</button>
</form>
由于许多原因。原因之一是#include <iostream>
using std::cout;
using std::cin;
int main() {
//SUB-ROUTINE: print directory paths with index, using "complex" algorithm
// (so an external command rather than a bash function)
// (this sub-routine gives choose-able options to a user)
// (please note this sub-routine includes `cout`)
unsigned index;
cout << "Input index: ";
cin >> index;
switch (index) {
case 0:
cout << "/home/user/foo"; break;
case 1:
cout << "/home/user/bar"; break;
default:
cout << "/home/user";
}
}
的输出不仅仅是生成的目录路径。
在这种情况下,如何更改调用进程的当前目录(cd $(a.out)
)?特定于Linux的方式是可以的。虽然,当然,将目录路径输出到文件中(在ramdisk中)并从bash读取它可以实现我想要的功能,但我认为这不是明智的方法。
相关:Changing the directory of the shell through a C++ program
补充:
如果我将C ++程序重写为
a.out
然后我可以写
bash
但这不是直接的(肮脏的),并且会使程序更加复杂。
答案 0 :(得分:1)
有点重,但是可以使用
cd $(a.out | awk '{print $NF}')
更改行
cout << "Input index: ";
到
cout << "Input index: \n";
然后使用
cd $(a.out | tail -1)
删除行
cout << "Input index: ";
一并使用:
cd $(a.out)
使用一些不同的标记打印所选目录,并使用该标记过滤输出。
示例:
std::cout << "==== " << "/home/user/foo" << std::endl;
break;
然后,您可以在bash
中使用:
cd $(a.out | grep '====' | awk '{print $2}]
答案 1 :(得分:-1)
我刚刚找到了答案。
根据man bash
命令替换
(剪裁)
Bash通过在子shell环境中执行命令并将命令替换替换为命令的标准输出来执行扩展
因此,除了最后一个(cout
)之外,其他人都可以用cerr
代替using std::cerr;
。