Bash 理解tty+;猛击
我发现我可以使用一个bash会话在另一个会话中打印文本,如下所示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只打印而不执行?我可以做些什么来这样执行我的脚本吗 (我知道这会招致很多批评,这些批评可能会用“
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
中。