我正在编写一个小命令行脚本,用于管理我的应用程序中的某些数据。
我使用fgets()
使用STDIN
来读取用户输入。
当我添加新的数据时,我可以使用fgets()
读取STDIN
的新数据,然后将其添加到数据库中。
添加数据的示例CLI接口:
Value: <user input>
我可以使用:
获得此用户输入$input = trim(fgets(STDIN));
我遇到问题的地方是编辑已经存在的数据的功能。
我想拥有的先前的值已预先填充用户输入。
编辑数据的示例CLI接口:
Value: <previous>
其中 <previous>
是旧值,且可编辑。
我尝试使用fwrite()
写入STDIN
,但所编写的数据不是可编辑的,并且光标始于数据的末尾。
我的尝试:
// Prompt
echo 'Value: ';
// Try and put the old data into STDIN
fputs(STDIN, $old_data);
// Get the new value from STDIN
$new_data = trim(fgets(STDIN));
接口最终看起来像这样:
Value: <old_data>
^
Cursor Position
和<old_data>
无法编辑。
然后,来自fgets(STDIN)
的返回数据仅给了我从光标启动位置后的数据。
我不确定如果没有任何疯狂的图书馆,PHP是否可行。任何帮助和想法都将不胜感激。
这将取决于您的外壳(我认为(,但是您可以用控制字符大多数XTERM进行操作。
bash的文档在这里:https://www.tldp.org/howto/bash-prompt-howto/x361.html
示例:
echo "foo: bar 33[3D";
字符