为什么bash的脚本与stdin的行为有所不同?

wu

这是我的脚本test.sh

if ssh myhost true; then
  echo 1
fi
echo 2

ps我为myhost设置了ssh密钥,因此它不会询问密码。

如果我通过bash运行它,它将输出两行

$ bash test.sh
1
2

但是,如果我将脚本重定向到bash的stdin,它只会输出一行

$ bash < test.sh
1

为什么bash表现不同?这是bash的错误还是魔术功能?

我已经尝试过bash 4.3和4.4。

ps如果替换ssh myhost truetrue,脚本将始终输出两行。

戈登·戴维森

简短的答案:让bash从文件中读取命令与让bash从文件中获取所有输入之间存在重要区别

ssh倾向于从标准输入中读取所有可用输入,然后通过连接将其发送到远程计算机。当您运行时bash test.sh,shell从test.sh读取命令,但是标准输入仍然是您的终端。ssh会将您输入的任何内容发送到true命令(它将忽略命令)。当您运行时bash < test.sh,会将标准输入设置为脚本,因此bash及其运行的命令都将从中读取。bash读取该if块,然后执行它;ssh读取脚本的其余部分(echo 2命令),并将其发送到remote true,后者将忽略它。然后bash发现它在输入的末尾,因此退出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么numpy导入的行为有所不同?

来自分类Dev

为什么groupby操作的行为有所不同

来自分类Dev

为什么hide()的行为有所不同?

来自分类Dev

为什么to_sym的行为有所不同?

来自分类Dev

为什么通过Crontab启动的脚本的行为有所不同?

来自分类Dev

为什么从函数调用Bash的“源”命令的行为会有所不同?

来自分类Dev

为什么我的脚本中的tar与手动使用tar的行为有所不同

来自分类Dev

Powershell脚本在TeamCity中的行为有所不同

来自分类Dev

键盘在bash下的行为有所不同

来自分类Dev

键盘在bash下的行为有所不同

来自分类Dev

为什么此数组初始化的行为有所不同?

来自分类Dev

为什么/ bin / sh在Mac和Ubuntu上的行为有所不同

来自分类Dev

为什么reference_wrapper对于内置类型的行为有所不同?

来自分类Dev

为什么这些小型D程序的行为有所不同?

来自分类Dev

在通过PropertyDescriptorCollection进行迭代时,为什么var的行为有所不同?

来自分类Dev

为什么Assembly和Activator对于CreateInstance的行为有所不同

来自分类Dev

为什么嵌套类在Java和C#之间的行为有所不同?

来自分类Dev

为什么`-lt`对于字符和字符串的行为有所不同?

来自分类Dev

为什么单个元素哈希表在Powershell中的行为有所不同?

来自分类Dev

DbQuery在foreach循环中的行为有所不同。为什么?

来自分类Dev

为什么Chrome和Firefox的行为有所不同?

来自分类Dev

为什么ContextMenuOpening的Source对于Canvas和UserControl的行为有所不同?

来自分类Dev

Unix find -exec:为什么以下行为有所不同?

来自分类Dev

在这些示例中,为什么“ last”在Perl中的行为有所不同?

来自分类Dev

为什么NumberFormatInfo在Azure环境中的行为有所不同?

来自分类Dev

为什么以foreach调用时,ForEach-Object的行为会有所不同?

来自分类Dev

为什么这些小型D程序的行为有所不同?

来自分类Dev

为什么pidof和pgrep的行为有所不同?

来自分类Dev

为什么在此示例中,“ grep”的行为有所不同?

Related 相关文章

  1. 1

    为什么numpy导入的行为有所不同?

  2. 2

    为什么groupby操作的行为有所不同

  3. 3

    为什么hide()的行为有所不同?

  4. 4

    为什么to_sym的行为有所不同?

  5. 5

    为什么通过Crontab启动的脚本的行为有所不同?

  6. 6

    为什么从函数调用Bash的“源”命令的行为会有所不同?

  7. 7

    为什么我的脚本中的tar与手动使用tar的行为有所不同

  8. 8

    Powershell脚本在TeamCity中的行为有所不同

  9. 9

    键盘在bash下的行为有所不同

  10. 10

    键盘在bash下的行为有所不同

  11. 11

    为什么此数组初始化的行为有所不同?

  12. 12

    为什么/ bin / sh在Mac和Ubuntu上的行为有所不同

  13. 13

    为什么reference_wrapper对于内置类型的行为有所不同?

  14. 14

    为什么这些小型D程序的行为有所不同?

  15. 15

    在通过PropertyDescriptorCollection进行迭代时,为什么var的行为有所不同?

  16. 16

    为什么Assembly和Activator对于CreateInstance的行为有所不同

  17. 17

    为什么嵌套类在Java和C#之间的行为有所不同?

  18. 18

    为什么`-lt`对于字符和字符串的行为有所不同?

  19. 19

    为什么单个元素哈希表在Powershell中的行为有所不同?

  20. 20

    DbQuery在foreach循环中的行为有所不同。为什么?

  21. 21

    为什么Chrome和Firefox的行为有所不同?

  22. 22

    为什么ContextMenuOpening的Source对于Canvas和UserControl的行为有所不同?

  23. 23

    Unix find -exec:为什么以下行为有所不同?

  24. 24

    在这些示例中,为什么“ last”在Perl中的行为有所不同?

  25. 25

    为什么NumberFormatInfo在Azure环境中的行为有所不同?

  26. 26

    为什么以foreach调用时,ForEach-Object的行为会有所不同?

  27. 27

    为什么这些小型D程序的行为有所不同?

  28. 28

    为什么pidof和pgrep的行为有所不同?

  29. 29

    为什么在此示例中,“ grep”的行为有所不同?

热门标签

归档