Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 理解tty+;猛击_Bash_Tty - Fatal编程技术网

Bash 理解tty+;猛击

Bash 理解tty+;猛击,bash,tty,Bash,Tty,我发现我可以使用一个bash会话在另一个会话中打印文本,如下所示 echo './myscript' > /dev/pts/0 # assuming session 2 is using this tty # or echo './myscript' > /proc/1500/fd/0 # assuming session 2's pid is 1500 但是为什么文本/myscript只打印而不执行?我可以做些什么来这样执行我的脚本吗 (我知道这会招致很多批评,这些批评可能会用“

我发现我可以使用一个bash会话在另一个会话中打印文本,如下所示

echo './myscript' > /dev/pts/0 # assuming session 2 is using this tty
# or
echo './myscript' > /proc/1500/fd/0 # assuming session 2's pid is 1500
但是为什么文本
/myscript
只打印而不执行?我可以做些什么来这样执行我的脚本吗

(我知道这会招致很多批评,这些批评可能会用“不要那样做!”但我希望这样做的真正原因是自动为
sshfs
提供密码。我使用的是本地WDMyCloud系统,每天晚上当我关闭电源时,它都会删除我的
.authorized_key
文件。)

为什么文本./myscript只打印而不执行

输入和输出是两件不同的事情

写入终端会将数据显示在屏幕上。从终端读取从键盘读取输入。向终端写入数据绝不会模拟键盘输入

输入和输出之间没有固有的耦合,您按下的键显示在屏幕上这一事实是一个有意识的设计决策:shell只需读取一个键,然后将其附加到其内部命令缓冲区,并将一个副本写入屏幕

这纯粹是为了您的利益,这样您就可以看到您正在键入的内容,而不是因为shell以任何方式关心屏幕上的内容。因为它不会,所以在屏幕上写更多的东西对shell的执行没有影响

我可以做些什么来这样执行我的脚本吗


不是通过写入终端,不。

这里是一个使用FIFO的示例:

#!/usr/bin/bash

FIFO="$(mktemp)"
rm -fv "$FIFO"

mkfifo "$FIFO"

( echo testing123 > "$FIFO" ) &

cat "$FIFO" | sshfs -o password_stdin testing@localhost:/tmp $HOME/tmp

如何存储密码并将其发送到FIFO取决于您

是否有任何原因导致您无法使用FIFO并从中读取密码?@Cez:您的意思是在使FIFO重定向ssh以读取密码之后?像
ssh myserver
?根据我最近的经验,ssh命令似乎拒绝从重定向读取密码。我不确定这些机制是什么,但我想这是一种安全措施。你还知道吗?@Cez:我刚刚重复了我认为你提出的实验,使用了我在上面评论中给出的命令。这是无效的。我不认为任何ssh相关的应用程序都会接受来自stdin的密码。你最好自动复制钥匙。@JellicleCat我添加了一个答案,告诉你我的意思+1谢谢。我不知道
sshfs
password\u stdin
选项,因为它不存在于
ssh
中。