首页 > 解决方案 > 如何在bash答案中优雅地存储和回显多行不起作用?

问题描述

我尝试了“如何在 bash 中优雅地存储和回显多行?”中所示的解决方案。从 2010 年 5 月 2 日开始,这基本上是对字符串变量进行双引号标记,以便它识别 BLOCK 中的多行。如果没有引号,我会将完整的字符串转储到单个换行行,就像前面问题中的示例一样。但是,当我在 "$VAR" 周围添加双引号时,答案说应该有效,我得到的只是一个双引号,后跟两个问号 "??

这是在 .bash_prompt 文件中,该文件由 .bascrc 文件调用,该文件由 .bash_profile 调用

这些文件中的每一个调用的所有其他元素以及许多元素都可以正常工作。这些包括路径、cd、提示符、服务器、git 位置等元素。我要添加的只是一个多行语句,指导用户了解他们可能期望的内容以及如果由于服务器重新启动、终端重新启动等原因尚未主动连接 Gitlab 存储库,他们可能需要输入的命令,因为他们最后一次主动使用。

我试过不加引号,给出一个连续的字符串,相当于我想要的五个单独的行,并且用终端窗口大小的换行转储完整的字符串。

我已经放弃了前面的双引号,认为它可能在更早的地方被打开了。An 尝试了删除结尾双引号的另一面。我试过单引号。我已经在我想换行的每一行的末尾尝试了半列。我尝试使用 \n 行创建一个字符串变量并回显该字符串。

read -d '' tell_user <<"BLOCK"
    If you are planning to utilize Gitlab.com repository?, wait until prompts 
    turn colors.
    YOU MAY NEED TO RUN THE COMMAND ssh-add ~/Directory/ed29183 (Dir & #'s 
    faked) 
    THEN AWAIT A REPLY OF Identity added:
    THEN RUN THE COMMAND ssh -T git@gitlab.com
    TO CONNECT TO THE GITLAB REPOSITORY
BLOCK

echo “$tell_user”

预期结果:

If you are planning to utilize Gitlab.com repository?, wait until prompts turn colors.
YOU MAY NEED TO RUN THE COMMAND ssh-add ~/Directory/ed29183  
THEN AWAIT A REPLY OF Identity added:
THEN RUN THE COMMAND ssh -T git@gitlab.com
TO CONNECT TO THE GITLAB REPOSITORY

观察结果:

"??

可能的升级答案:您可能会看到我的基本目标是确保本地机器连接到 Gitlab 和那里的存储库,以便在开发活动期间,如果连接不存在,用户知道它以及如何重新连接以便他们可以添加和提交任何更新等。这个小代码片段是其中一部分的提示修改已经告诉用户他们在自己的物理机器上的位置,机器名称和缩写路径位置,还告诉用户他们是什么 Git 主或分支工作。片段中的第一个语句“等到提示变为颜色”已设置,以便在连接存在时执行此操作。我真的很想考虑一个逐步的终端提示,它需要用户和远程机器输入来“测试” 连接的状态是什么,询问用户是否需要它,如果它没有建立,然后给出适当的分支操作(包括连接速度的时间延迟处理)。因此,如果有人有更多功能的更出色的答案,我会全神贯注。
但是现在,如果我可以让这个消息逐行呈现而不是一个长字符串转储,我会很高兴。

标签: bashgitgitlabechomultiline

解决方案


您是否确实使用了“智能”引号?

echo “$tell_user”

Bash 不理解他们。而是使用普通的双引号:

echo "$tell_user"

为我工作:

$ echo $tell_user
If you are planning to utilize Gitlab.com repository?, wait until prompts turn colors. YOU MAY NEED TO RUN THE COMMAND ssh-add ~/Directory/ed29183 (Dir & #'s faked) THEN AWAIT A REPLY OF Identity added: THEN RUN THE COMMAND ssh -T git@gitlab.com TO CONNECT TO THE GITLAB REPOSITORY

$ echo "$tell_user"
If you are planning to utilize Gitlab.com repository?, wait until prompts 
    turn colors.
    YOU MAY NEED TO RUN THE COMMAND ssh-add ~/Directory/ed29183 (Dir & #'s 
    faked) 
    THEN AWAIT A REPLY OF Identity added:
    THEN RUN THE COMMAND ssh -T git@gitlab.com
    TO CONNECT TO THE GITLAB REPOSITORY

推荐阅读