错误使用具有两个值的屏幕参数 -X

错误使用具有两个值的屏幕参数 -X

答案中的示例中的“东西”是什么意思如何在屏幕中运行程序,将所有输出重定向到文件并分离,因为该命令位于 $'' 区域之后。

screen -S workspace -X stuff $'ps aux > output-x\n'

如何在屏幕中运行程序,将所有输出重定向到文件并分离

答案1

根据评论

stuff 发送字符,就像您键入它们一样

这似乎只有在会话在某个时刻(即创建时)附加时才有效。此外,由于它发送字符,因此执行命令需要发送换行符。

对于 Linux,对我有用的步骤:

  1. screen -S some_session_name
  2. Ctrl+A D分离
  3. screen -S some_session_name -X stuff 'command'$(echo -ne '\015')

我从中得到了指示“终端/生活”帖子:将命令发送到屏幕会话

答案2

来自手动的

将字符串string填充到当前窗口的输入缓冲区中。

会议肯定会不是需要永远附着。

让我们来分解一下:

  1. GNU 屏幕是一个程序,可让您与正在运行的程序断开连接,然后稍后重新连接到它们。
  2. screen -dmS workspace创建一个已断开连接的新屏幕。
  3. screen -S workspace -X [command]会寄[命令]屏幕会话调用工作区
  4. [命令]不是 bash 命令;这只是一个内部命令屏幕CTRL+A...:与连接到时按 相同屏幕会话正常。
  5. 其他例子[命令]detachsessionname myNewName.
  6. [命令]用户选择的是stuff- 这只是“粘贴文本”进入它的会话。
  7. stuff需要一个字符串作为参数...因此,如果您提交stuff "hello"然后重新连接到屏幕会话:您将看到hello输入的单词,后面有闪烁的光标...
  8. 你可以欺骗screen执行你的文本“粘贴”通过在文本末尾放置一个换行符(例如\n^M)。
  9. 所以现在,如果你改变了你的“粘贴”"hello"完整命令的字符串"hello^M"将如下所示:screen -S workspace -X stuff "hello^M"... 现在,当您重新连接到屏幕时,您会看到它说Command 'hellohello' not found.
  10. hello现在,我们只需用我们想要执行的任何内容替换粘贴的文本即可!

例子:

screen -ls
> "No Sockets found."

screen -dmS workspace
screen -ls
> "There is a suitable screen on..."

screen -S workspace -X stuff "echo Hello World! PID $$ > hello.txt^M"
cat hello.txt
> Hello World! PID 1234

相关内容