了解 tty + bash
Understanding tty + bash
我看到我可以使用一个 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
只打印不执行呢?我可以做些什么来以这种方式执行我的脚本吗?
(我知道这会引起很多批评,可能会用 "DON'T DO THAT!" 填充任何答案,但我希望这样做的真正原因是自动为 sshfs
。我正在使用本地 WDMyCloud 系统,它会在我每晚关闭电源时删除我的 .authorized_keys
文件。)
why does the text ./myscript only print and not execute?
输入和输出是两个不同的东西。
写入终端会将数据显示在屏幕上。从终端读取从键盘读取输入。写入终端绝不会模拟键盘输入。
输入和输出之间没有内在的耦合,您按下的键会显示在屏幕上这一事实是一个有意识的设计决定:shell 只是读取一个键,然后将其附加到它的内部命令缓冲区,并将副本写入屏幕。
这纯粹是为了您的利益,这样您就可以看到您正在输入的内容,而不是因为 shell 在任何方面都关心屏幕上显示的内容。因为它没有,所以向屏幕写入更多内容对 shell 执行的内容没有影响。
Is there anything that I can do to execute my script this way?
不是通过写入终端,不。
下面是一个使用 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 由您决定
我看到我可以使用一个 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
只打印不执行呢?我可以做些什么来以这种方式执行我的脚本吗?
(我知道这会引起很多批评,可能会用 "DON'T DO THAT!" 填充任何答案,但我希望这样做的真正原因是自动为 sshfs
。我正在使用本地 WDMyCloud 系统,它会在我每晚关闭电源时删除我的 .authorized_keys
文件。)
why does the text ./myscript only print and not execute?
输入和输出是两个不同的东西。
写入终端会将数据显示在屏幕上。从终端读取从键盘读取输入。写入终端绝不会模拟键盘输入。
输入和输出之间没有内在的耦合,您按下的键会显示在屏幕上这一事实是一个有意识的设计决定:shell 只是读取一个键,然后将其附加到它的内部命令缓冲区,并将副本写入屏幕。
这纯粹是为了您的利益,这样您就可以看到您正在输入的内容,而不是因为 shell 在任何方面都关心屏幕上显示的内容。因为它没有,所以向屏幕写入更多内容对 shell 执行的内容没有影响。
Is there anything that I can do to execute my script this way?
不是通过写入终端,不。
下面是一个使用 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 由您决定