标签: heredoc

在 CentOS linux bash 脚本中 echo 写入文件时转义美元符号

我正在编写一个 bash 脚本,需要在此位置创建一个文件:

/etc/yum.repos.d/nginx.repo

包含以下内容:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
Run Code Online (Sandbox Code Playgroud)

所以,我尝试这样做:

cat >/etc/yum.repos.d/nginx.repo <<EOL
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=0
enabled=1
EOL
Run Code Online (Sandbox Code Playgroud)

当我检查文件的内容时,我看到以下内容:

在此输入图像描述

正如您所看到的,美元符号没有被转义,因此变量被评估为 null/空字符串,并且内容看起来不正确。因为,当我尝试安装 nginx 时,出现以下错误:

http://nginx.org/packages/centos///repodata/repomd.xml:[Errno 14] HTTP 错误 404 - 未找到

有任何想法吗?

linux bash nginx heredoc

4
推荐指数
1
解决办法
2266
查看次数

Heredoc 中增量运算符的使用

我想通过使用heredoc中的增量运算符来增加变量的值。我当前的代码如下...

$counter = 0;
for($i = 0; $i<10; $i++):
echo <<< EOT
    $counter++ <br/>
EOT;
endfor;
Run Code Online (Sandbox Code Playgroud)

它的输出是...

0++
0++
.
.
Run Code Online (Sandbox Code Playgroud)

平均后增量运算符不起作用。

我也尝试过预增量,如下所示......

echo <<< EOT
   ++$counter <br/>
EOT;
Run Code Online (Sandbox Code Playgroud)

它的输出是...

++0
++0
.
.
Run Code Online (Sandbox Code Playgroud)

意味着预增量运算符也不起作用。

我还尝试将增量操作放在大括号内,如下所示......

echo <<< EOT
    {++$counter} <br/>
EOT;
Run Code Online (Sandbox Code Playgroud)

但还是没有运气。输出是....

{++0} 
{++0} 
.
.
Run Code Online (Sandbox Code Playgroud)

我也在谷歌上搜索过,但没有找到任何有用的东西。

我知道如果我可以在heredoc之前增加值,那么我可以在这里正确打印它

$counter = 0;
for($i = 0; $i<10; $i++):
++$counter;
echo <<< EOT
    $counter <br/>
EOT;
endfor;
Run Code Online (Sandbox Code Playgroud)

效果很好。

但我想在heredoc中使用增量运算符,就像我们在单引号或双引号的情况下使用 一样echo

但heredoc似乎不支持增量操作。

php heredoc

4
推荐指数
1
解决办法
375
查看次数

Docker 的 RUN 的heredoc示例不起作用

我尝试实现Docker本身提供的示例(https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/

# syntax=docker/dockerfile:1.3-labs

FROM ubuntu:20.04

RUN <<EOF
echo "Hello" >> /hello
echo "World!" >> /hello
EOF
Run Code Online (Sandbox Code Playgroud)

使用docker版本

~/test$ docker --version
Docker version 20.10.22, build 3a2c30b
Run Code Online (Sandbox Code Playgroud)

但它会抛出错误

~/test$ docker build .
Sending build context to Docker daemon  2.048kB
Error response from daemon: dockerfile parse error line 6: unknown instruction: ECHO
Run Code Online (Sandbox Code Playgroud)

我还尝试过 dockerfile 版本 1、1.3、1.4、2、2.0。什么都没起作用。我做错了什么或者它只是不起作用(还)?

heredoc docker dockerfile

4
推荐指数
1
解决办法
2040
查看次数

如何绑定scala的heredoc中的数据?

val name = "mike"
val str = """Hi, {name}!"""
println(str)
Run Code Online (Sandbox Code Playgroud)

我希望它输出str as Hi, mike!,但失败了.这该怎么做?

scala heredoc rawstring

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

ruby here-doc带循环

你可以做一个循环和here-doc,像这样:

array.each do |ele|
  a=<<-TEXT
   ele
   some stuff
  TEXT
end
Run Code Online (Sandbox Code Playgroud)

谢谢

ruby loops heredoc

3
推荐指数
1
解决办法
1275
查看次数

您可以在条件文档中放入条件语句吗?

您可以在条件文档中放入条件语句吗?

IE浏览器:

sky = 1
str = <<EOF
The sky is #{if sky == 1 then blue else green end}
EOF
Run Code Online (Sandbox Code Playgroud)

谢谢

ruby heredoc

3
推荐指数
1
解决办法
4585
查看次数

BASH中文件的意外结束

写一个简单的bash脚本在早上为我做一些检查:一部分是拉下一些html文件并确保它们存在.另一部分是确保存在一些本地文件,如果不存在则通过电子邮件发送.我面临的问题是我收到了"语法错误:意外的文件结束",我无法理解为什么会发生这种错误.这是代码的简化版本:

for myHost in $HOSTS
do
  result=$(wget -T $TIMEOUT -t 1 $myHost -O /dev/null -o /dev/stdout)
  result2=$(echo $result | grep "awaiting response")
  connected=$(echo $result | grep "404");
  if [ "$connected" != "" ]; then
    for myEMAIL in $EMAIL
    do
      echo -e "$(date) - $myHost is down! \n This is an automated message." | mailx -r "box.email.com"  -s "$SUBJECT" $myEMAIL
    done
  fi
done

numoffiles=`find . -maxdepth 1 -mtime -1 | grep -i .html | wc -l`
if [ "$numoffiles" -ne 5 …
Run Code Online (Sandbox Code Playgroud)

string bash heredoc syntax-error

3
推荐指数
1
解决办法
1432
查看次数

PowerShell here-字符串中的变量必须在哪里初始化?

我有一个相当复杂的SQL查询,我想在PowerShell脚本中的here-string中使用.在查询中,我想用PowerShell变量替换某些值.我试图准确理解我需要声明和初始化将在here-string中使用的变量.

简化示例:

$SqlQuery = @"
update MyTable 
set foo = $bar
where baz = $quux
"@

...

foreach ($part in $parts) {
    $bar = $part[0]
    $quux = $part[1]

    Run-SqlNonQuery $SqlQuery    #Run-SqlNonQuery is a funct. that executes the query
}
Run Code Online (Sandbox Code Playgroud)

我在顶部声明了here-string,它引用了一些PowerShell变量,$ bar和$ quux,每次循环都会改变.

但是,当我运行脚本时,我遇到了错误.当我运行SQL跟踪时,PS脚本中没有出现PowerShell变量的值.

在像这样的here-string中调用时,PowerShell变量是否被插值?我是否需要将整个here-string 放在变量初始化的循环中?对于这样的事情,正确的结构是什么?

我在Windows 7,.Net 4,VS2010上运行PowerShell.我不清楚这个版本; $Host回报

Name             : PowerConsole
Version          : 1.0.30222.0
Run Code Online (Sandbox Code Playgroud)

但是$PSVersionTable回归

PSVersion             2.0                                                      
PSCompatibleVersions  {1.0, 2.0}
BuildVersion          6.1.7601.17514
Run Code Online (Sandbox Code Playgroud)

powershell heredoc

3
推荐指数
1
解决办法
9984
查看次数

here-禁用shell解析的文档

我需要一个here文件上传TeX到在线shell.我不希望shell对内容做任何事情.以下MWE是我迄今为止管理得最好的.

cat << EOF > /tmp/mytex 
\documentclass{article}
\begin{document}
Test mathematics:  $ 2^{10} = 1024$ works but
$e^{i\pi} = -1$ is mangled because no space follows the $e$.
"double" and 'single' quotes should be preserved too.
\end{document}
EOF
Run Code Online (Sandbox Code Playgroud)

bash heredoc

3
推荐指数
1
解决办法
350
查看次数

在heredocs中着色,bash

如果我之前已经定义了这样的颜色变量:

txtred='\e[1;31m'
Run Code Online (Sandbox Code Playgroud)

我如何在heredoc中使用它:

    cat << EOM

    [colorcode here] USAGE:

EOM
Run Code Online (Sandbox Code Playgroud)

我的意思是我应该写什么代替[colorcode here]将USAGE文本呈现为红色?${txtred}不会起作用,因为这是我在整个bash脚本中使用的,在heredoc之外

bash colors heredoc

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

标签 统计

heredoc ×10

bash ×4

ruby ×2

colors ×1

docker ×1

dockerfile ×1

linux ×1

loops ×1

nginx ×1

php ×1

powershell ×1

rawstring ×1

scala ×1

string ×1

syntax-error ×1