理解tty + bash

问题描述 投票:2回答:2

我看到我可以使用一个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_keys文件。)

bash tty
2个回答
4
投票

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

输入和输出是两回事。

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

输入和输出之间没有固有的耦合,而且你按下的键完全显示在屏幕上是一个有意识的设计决定:shell只是读取一个键,然后将它附加到其内部命令缓冲区,并写入一个副本到屏幕。

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

有什么办法可以用这种方式执行我的脚本吗?

不是写到终端,没有。


1
投票

以下是使用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取决于您

© www.soinside.com 2019 - 2024. All rights reserved.