当我尝试:$ stty raw -echo在我的终端上(Bash on OS X 10.6).它确实有点刺激,就像终端挂在那里一样.然后我查阅手册:
stty - 设置终端设备接口的选项
原始(-raw)
如果设置,则更改终端的模式,以便不执行输入或
输出处理.如果未设置,请将终端的模式更改为执行输入和输出处理的某种合理状态.请注意,由于终端驱动程序不再具有单个RAW位,因此无法在设置raw之前直接设置标记.这意味着取消设置raw可能不会放回之前有效的所有设置.要将终端设置为原始状态然后准确还原,建议使用以下shell代码:Run Code Online (Sandbox Code Playgroud)save_state=$(stty -g) stty raw ... stty "$save_state"回声(-echo)
每个键入的字符回显(不回显).
所以它应该以原始模式转换终端,然后返回我输入的内容?有人可以解释这个命令的作用吗?当一个论证冲破时,有什么区别,例如raw和-raw?他们的意思是一样的吗?有什么资源我可以学到这个吗?
我正在尝试使用vagrant和默认的ubuntu 10.04 64位计算机将我的开发环境(symfony2应用程序)从我的Windows 7 localhost移动到虚拟机.一切都已建立,几乎可以运作,但有一件事困扰着我:
当我运行ant并执行phpunit时,我在执行自制引导时遇到以下错误:
stty: standard input: Invalid argument
Run Code Online (Sandbox Code Playgroud)
我可以将问题缩小到以下代码行,执行symfony cache:warmup命令:
executeCommand($application, "cache:warmup");
Run Code Online (Sandbox Code Playgroud)
这将执行以下命令:
php app/console -e test -q cache:warmup
Run Code Online (Sandbox Code Playgroud)
没有ant的运行phpunit工作正常,没有executeCommand行运行ant也是如此.
我读了一些关于这个stty的错误,抬头~/.bashrc,~./profile,/etc/bash.bashrc,/etc/profile以及/root/.bashrc和/root/.profile没有找到像TTY或stty的东西.所以我不知道我可以删除什么使它工作.
我有点卡住,因为我需要缓存预热,无法弄清楚出了什么问题.
我正在使用JLine 2(v2.13)和Socket IO为我的应用程序创建一个管理控制台,可以通过普通的telnet客户端访问.但是我发现打印出换行符时会打印出奇怪的符号:
act.app.restart restart app^Jact.job.list List jobs
Run Code Online (Sandbox Code Playgroud)
正确的输出应该是:
act.app.restart restart app
act.job.list List jobs
Run Code Online (Sandbox Code Playgroud)
我追溯到代码,发现以下代码行导致了麻烦:
另一个奇怪的事情是当我按下向上箭头来获取历史记录时,控制台打印出来^[[A并且没有其他任何事情发生.
有谁有想法吗?
更新:添加了相关的源代码
ConsoleReader和分派命令的代码:更新2
对不起,我已经消失了一段时间.刚回来,因为我的项目让我呼吸新鲜空气.所以这就是发生的事情:我创建了一个PrintWriter并将其用作^J问题的解决方法:
但是,jline2与telnet会话一起使用时还有许多其他问题:
<TAB>显示选项卡而不是激活完整列表.但是,在我按下回车键后,它会给我一个完整的列表以及一条错误消息:

<UP>箭头,显示^[[A,按回车键,它将执行我的最后一个命令.但是我丢失了命令行编辑问题仍然存在,我相信应该有办法解决它只需要一些指导......
编辑:我已经使用以下脚本进行了一些测试(在此处找到:从Arduino返回的PHP串口数据).即使使用fwrite到/ dev/ttyUSB0,也会输出我的新命令以及从设备发送的最后一个命令.这让我觉得可能没有正确设置串口(例如可能需要使用stty来更改设置以清除缓冲区)或者还有其他我需要做的事情(使用php)来清除/ dev /中的缓冲区ttyUSB0在发送新命令之前.任何帮助将不胜感激,谢谢.
$fp =fopen("/dev/ttyUSB0", "w+");
if( !$fp) {
echo "Error";die();
}
fwrite($fp, $_SERVER['argv'][1] . 0x00);
echo fread($fp, 10) . "\n";
fclose($fp);
Run Code Online (Sandbox Code Playgroud)
原始问题:
我正在使用php-serial通过串口与设备通信.该设备具有在屏幕上显示所有输入和输出到串行端口的功能.当我运行以下脚本时,我可以在设备上看到脚本正在接收设备输出的每个命令并将其重复回设备.我相信这会导致一个问题,我只想回答"OK"回到设备,不重复输出然后说'OK'.首先重复相同的命令似乎混淆了它然后它将不遵守'OK'命令.我可以通过在循环上每0.1秒输出'OK'来解决这个问题,但我宁愿从设备读取输出然后相应地响应它.我不相信我的脚本中有任何东西告诉它重复命令.这是任何人都经历过的php-serial类的问题吗?我试过设置$ autoflush = false; 没有区别.
我的剧本:
require_once('php_serial.class.php');
$serial = new phpSerial;
$serial->deviceSet('/dev/ttyUSB0');
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->deviceOpen();
while (true) {
$read = $serial->readPort();
if ($read) {
echo date("r") . ' ' . $read;
// $serial->sendMessage("\r\nOK\r\n");
}
}
$serial->deviceClose();
Run Code Online (Sandbox Code Playgroud)
在运行脚本之前在设备屏幕上输出示例:
Tx: AT
Tx: AT&F
Tx: ATE0
Tx: AT+IPR=9600
Tx: AT
Tx: AT
Tx: AT …Run Code Online (Sandbox Code Playgroud) 我有一个Python脚本,用于使用Python子进程模块跨多个主机并行执行命令.它包装了SSH,基本上就这样调用:
output = subprocess.Popen(["/bin/env", env, "/usr/bin/ssh", "-t", "%s@%s" % (user, host), "--", command], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
Run Code Online (Sandbox Code Playgroud)
有效命令执行如下:
/bin/env TERM=$TERM:password /usr/bin/ssh -t "%s@%s" % (user, host), "--", command
Run Code Online (Sandbox Code Playgroud)
它工作正常,除了我得到一个间歇性错误,我的终端在运行脚本后搞砸了(丢失换行符).从命令行"重置"修复它,但我不确定这是怎么回事.我注意到有时在元组输出的第一项结尾处有一个"\ r \n",有时它不在那里.请参阅以下内容,特别是" Permission denied\r \n":
**** Okay output ****
[user@/home/user]# ./command.py hosts.lists "grep root /etc/shadow"
Running command "grep root /etc/shadow" on hosts in file "hosts.test"
('grep: /etc/shadow: Permission denied\r\n', 'Connection to server1.example.com closed.\r\n')
('grep: /etc/shadow: Permission denied\r\n', 'Connection to server2.example.com closed.\r\n')
[user@/home/user]#
**** Output causes terminal to not display newlines …Run Code Online (Sandbox Code Playgroud) 就像控制键在终端中用'^'表示,命令键(mac)的等价物是什么?
我正在尝试使用stty重新映射我的bash快捷方式
例如
stty eof ^ D.
但是我想使用命令键而不是控制.
编辑:
好吧,我试图解决的问题是我想要交换命令和控制键,因为我在osx和linux上工作,不同的键组合给我带来了很大的痛苦.
所以我使用osx首选项交换了修饰键.但是现在像Ctrl + C等所有的bash快捷键已经变得等同于使用键序列'cmd + c'了 - 这是不可接受的.
值得庆幸的是iTerm2,也支持重新映射修饰键,因此对于iterm2我再次反转它们,这意味着iTerm2将命令识别为命令和控制作为控制.
所以问题现在解决了.
这是如何通过 go 中的系统调用获取 (POSIX) 终端大小的方法:
func getTermDim() (width, height int, err error) {
var termDim [4]uint16
if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(0), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&termDim)), 0, 0, 0); err != 0 {
return -1, -1, err
}
return int(termDim[1]), int(termDim[0]), nil
}
Run Code Online (Sandbox Code Playgroud)
现在,同样的事情,用 os/exec 调用 stty:
func getTermDim() (width, height int, err error) {
cmd := exec.Command("stty", "size")
cmd.Stdin = os.Stdin
var termDim []byte
if termDim, err = cmd.Output(); err != nil {
return
}
fmt.Sscan(string(termDim), &height, &width)
return
} …Run Code Online (Sandbox Code Playgroud) 我试图使用bash从ttyS0读取并需要设置以下但我努力想出来
databits = 7
stopbits = 2
parity = 0
flow control = 0
Run Code Online (Sandbox Code Playgroud)
继承我的代码:
#!/bin/bash
# Port setting
stty -F /dev/ttyS0 raw speed 1200
# Loop
while [ 1 ];
do
echo 'LOADING...'
READ=`dd if=/dev/ttyS0 count=1`
echo $READ
echo '[PRESS Ctrl + C TO EXIT]'
done
Run Code Online (Sandbox Code Playgroud)
该脚本正在运行,但我需要设置参数.有什么建议?谢谢:)
我正在尝试构建一个全屏终端应用程序。我使用 Go 作为我选择的语言。我已经弄清楚如何读取os.Stdin,但我不清楚如何清除终端窗口并操纵光标位置。我还想捕获终端输入而不打印(回显)。
我的问题是:
我的意图:
我想创建一个全屏终端应用程序,它呈现自己的 UI 并在内部处理输入(热键/导航/等...)。
如果有任何库涵盖此类用例,请随时推荐它们。
我需要使用波特率为 115200 的 USB 串行电缆。我尝试使用 MACbook 终端应用程序中的 stty 命令设置速率,如下所示;
$stty -f /dev/tty.usbserial-A103BTIB 115200
Run Code Online (Sandbox Code Playgroud)
并确认设置如下;
$stty -f /dev/tty.usbserial-A103BTIB -a
&speed 9600 baud; 0 rows; 0 columns;
lflags: -icanon -isig -iexten -echo -echoe -echok -echoke -echonl
-echoctl -echoprt -altwerase -noflsh -tostop -flusho -pendin
-nokerninfo -extproc
iflags: -istrip -icrnl -inlcr -igncr -ixon -ixoff -ixany -imaxbel -iutf8
-ignbrk -brkint -inpck -ignpar -parmrk
oflags: -opost -onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; …Run Code Online (Sandbox Code Playgroud)