小编Jas*_*n R的帖子

将数据通过管道传输到进程的标准输入,之后不会导致 EOF

我有一个可以启动用户交互式 shell 的可执行文件。我想在 shell 启动时先注入一些命令,然后允许用户进行交互式会话。我可以使用以下方法轻松做到这一点echo

echo "command 1\ncommand 2\ncommand3" | ./shell_executable
Run Code Online (Sandbox Code Playgroud)

几乎有效。问题是,一旦完成回显我的命令,为进程的标准输入提供数据的 echo 命令就会命中 EOF。这个 EOF 会导致 shell 立即终止(就像您在 shell 中按下了 Ctrl+D 一样)。

有没有办法将这些命令注入 stdin 而不会导致 EOF 之后?

pipe shell-script stdin

38
推荐指数
2
解决办法
3万
查看次数

如何检测远程 SSH 会话何时拥有 shell?

我的问题与类似,但我正在寻找稍微不同的问题。我有一台笔记本电脑,用于在两种不同的情况下访问网络上的 Linux 机器:

  • 我有一个直接的有线连接到网络。

  • 我与网络有间接连接。网络上有一台暴露在 Internet 上的网关机器,我可以用它来建立到网络上主机的 SSH 隧道。这显然是一个更慢、更高延迟的连接。

我的主目录可从所有机器通过网络访问,因此它们共享我的.bashrc. 我想添加功能来.bashrc检测我所处的两个场景中的哪一个并采取相应的行动(从技术上讲,会有三个场景,其中第三个是我登录到我的本地机器,但这应该很容易处理)。我想做这样的事情:

  • alias ssh ssh -X 当我在本地网络上,但我不想在 Internet 上使用 X 转发时。

  • export EDITOR=gvim当我在本地网络上时,export EDITOR=vim但当我在远程时。

等等。根据之前的答案,看起来我应该能够通过检查SSH_CLIENT(如果存在)的内容并查看客户端 IP 地址是否与本地计算机上的网络适配器之一匹配来完成类似的操作。我想我会看看是否有更灵活或更强大的方法来实现这一点。

shell ssh bashrc

9
推荐指数
1
解决办法
2168
查看次数

标签 统计

bashrc ×1

pipe ×1

shell ×1

shell-script ×1

ssh ×1

stdin ×1