【问题标题】:scripting a write command to another user编写写命令给另一个用户
【发布时间】:2017-07-06 15:49:45
【问题描述】:

我正在测试一个脚本以将预定义的消息写入另一个用户。我首先尝试给自己写信(同一台机器上的两次登录)。脚本挂起而不发送消息,直到我在发送登录时使用 ctrl+c 手动终止,此时接收登录仅显示我发送了 EOF。脚本如下:

#!/bin/bash
write myName
message
!kill $$

即使我取消注释 kill 命令,就像 write 命令一样,也看不到以下消息。当我用 ctrl+c 终止发件人时,我看到以下内容......

[....]$ ./writeScript.sh
write: myName is logged in more than once; writing to pts/112    (hangs here)
^C./writeScript.sh: line 3: message: command not found
Terminated
[...]$

接收者看到...

Message from myName@myPlace on pts/143 at 09:53 ...
EOF

如何让这条消息成功发送?谢谢。

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    你需要输入才能写作。比如:

    #!/bin/bash
    write myName << EOM
    message
    EOM
    

    或:

    echo message | write myName
    

    【讨论】:

    • 第二个建议有效,但第一个无效。如何修改管道命令以发送多个单独的行?我尝试了“echo m1 | echo m2 | write myName”,但只发送了第二条消息(可能是因为 echo 试图通过管道传递给 echo,这很愚蠢)。
    • heredoc(第一个示例)应该可以工作,并且是发送多行文本的最佳方式。但是,您也可以使用echo "text\nover\nmultiple\nlines" | write myName(只需将多行括在引号中即可。)
    • 要使用多重回声,请执行:{ echo m1; echo m2; echo m3; } | write myName
    • 请注意,在前面的评论中,我并不是建议将文字字符串 \n 嵌入到传递给 echo 的字符串中。相反,我在注释中用\n 标注文字换行符,因此如果您要在交互式会话中输入示例,您可以输入echo "text&lt;hit return&gt;over....
    猜你喜欢
    • 2020-12-20
    • 2021-01-02
    • 2014-04-18
    • 2015-11-26
    • 2012-05-09
    • 2022-01-10
    • 2020-07-17
    • 2015-11-11
    • 1970-01-01
    相关资源
    最近更新 更多