标签: here-document

使用 sudo tee 和 heredoc 附加到现有文件

在 bash 中生成脚本并将其保存到需要 sudo 的位置,我们有这个方法,我喜欢:

sudo tee "$OUTFILE" > /dev/null <<'EOF'
foo
bar
EOF
Run Code Online (Sandbox Code Playgroud)

但是,我想使用这种方法附加到现有文件 $OUTFILE。上述方法覆盖现有文件 $OUTFILE。

bash files tee here-document

15
推荐指数
2
解决办法
8808
查看次数

如何理解“cat &gt; file_name &lt;&lt; blah”命令?

在以下命令中,cat 获取 here-doc 的内容并将其重定向到名为 conf 的文件:

cat > conf << EOF
var1="cat"
var2="dog"
var3="hamster"
EOF
Run Code Online (Sandbox Code Playgroud)

如何理解这里的命令顺序?是否bash首先处理其他所有内容(此处为文档部分),并作为最后一步,它看起来像> conf部分?

shell bash here-document

14
推荐指数
2
解决办法
4910
查看次数

在 Makefile 中使用 Heredoc。是否可以?

我使用的Makefile默认步骤是打印其他选项的帮助文档。EOF如果我可以添加一个部分而不是多个,那就太好了echo。是否可以EOFMakefilebash 脚本一样使用它?

make documentation here-document

13
推荐指数
2
解决办法
8441
查看次数

将 here-doc 用于 `sed` 和文件

我想对 sed 命令使用 here-doc 并提供要读取的文件和输出文件。

我已经查看了Advanced Bash Scripting guide中的Here-Documents,但它没有提到使用 here-doc 时关于常规参数的任何内容。甚至有可能吗?

我想实现以下目标:

#!/bin/bash
OUT=/tmp/outfile.txt
IN=/my_in_file.txt

sed $IN << SED_SCRIPT
    s/a/1/g
    s/test/full/g

SED_SCRIPT 
> $OUT;
Run Code Online (Sandbox Code Playgroud)

任何帮助都非常感谢。

bash sed here-document

11
推荐指数
2
解决办法
6505
查看次数

bash:在只读根分区上使用 read &lt;&lt;&lt;"$VARIABLE" 时出现一些问题。任何已知的解决方法?

巧合的是,我不得不使用我的 ATA-ID-to-device-name 脚本(在这里找到:https : //serverfault.com/questions/244944/linux-ata-errors-translating-to-a-device-name/ 426561#426561 ) 在只读 /分区上。如果你好奇,它是一个 Ubuntu 恢复控制台,它可以让你访问你的/分区,但默认情况下它会以只读方式挂载。我对此很高兴,因为否则我可能永远不会发现我的脚本由于特定行而在 R/O 系统上表现得很奇怪,这个:

IFS=: read HostMain HostMid HostSub <<< "$HostFull"
Run Code Online (Sandbox Code Playgroud)

这并不会在没有写权限的工作。不过,我不会认为它会失败。但显然<<<操作员确实需要将一些临时文件写入某个地方。

但是有没有办法绕过临时文件的创建,或者,有没有办法指定文件的写入位置?在 Ubuntu 恢复控制台中,有——奇怪的是——对/run目录的写权限,如果我能以某种方式“告诉”read将临时文件写入其他地方而不是平常,那就可以了。

bash tmp readonly here-document read

11
推荐指数
1
解决办法
829
查看次数

将 SQL 查询的输出分配给变量

我正在连接到 oracle 数据库并触发查询并将输出分配给变量但是当我回显变量的值时,它没有被正确打印。

count=`sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
           set pagesize 0 feedback off verify off heading off echo off;
           select max(cust_id) from cutomers
           exit;
           END`
           echo $count
Run Code Online (Sandbox Code Playgroud)

查询在数据库上触发时返回正确的结果。但是“计数”变量的值不正确。

shell-script here-document

10
推荐指数
1
解决办法
13万
查看次数

将变量传递给使用“EOF”并将变量视为文字的 bash 脚本

在这个脚本中,我最终将“$1”保存到 /test 文件中。

#!/bin/bash
cat > /test << 'EOF'
$1
EOF
Run Code Online (Sandbox Code Playgroud)

事实是..我需要保持

'EOF'
Run Code Online (Sandbox Code Playgroud)

为“EOF”,因为我的论点($1)包含美元符号。

但我需要保存该参数而不是 1 美元

bash shell-script cat here-document

10
推荐指数
2
解决办法
5万
查看次数

如何以正确的方式在heredoc中缩进heredoc?

以下代码是用于安装 Apache 的脚本。当从包装它的 heredoc 块 (APACHE) 执行它时,我就地运行这个脚本。

请注意,在这个 APACHE heredoc 中,我有一个内部 heredoc (MOD_REWRITE),我可以将其称为“次要”或“内部”heredoc。

还请注意,除了内部heredoc的代码外,APACHE内部的所有代码都是缩进的(列表)。

bash /dev/fd/10 10<<'APACHE'

    # Setup basics:

    apt-get update -y && apt-get upgrade -y
    apt-get install tree zip unzip
    a2enmod mcrypt && a2enmod mbstring

    # Setup LAMP environment with enabled mod rewrite:

    echo -e "\07" && echo -e "\077" # Insert password.
    apt-get install lamp-server^ -y
    a2enmod rewrite

cat <<MOD_REWRITE >> /etc/apache2/apache2.conf

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
MOD_REWRITE

    systemctl restart apache2.service …
Run Code Online (Sandbox Code Playgroud)

here-document

10
推荐指数
2
解决办法
8537
查看次数

Bash:如何将参数传递给 heredoc 脚本

想象一下,你有一个愚蠢的脚本 test.sh ,参数被传递给它,看起来像这样:

bash test.sh arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

test.sh 是一个显示其命令行的愚蠢脚本:

#!/bin/bash
echo "$0 $*"
Run Code Online (Sandbox Code Playgroud)

我想使用 bash heredoc << 将脚本提供给 bash 来做同样的事情。所以我试过这个:

#!/bin/bash
echo "$0 $*"
Run Code Online (Sandbox Code Playgroud)

但它失败并出现错误

bash: arg1: No such file or directory
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

bash shell-script here-document

10
推荐指数
1
解决办法
288
查看次数

“cat &lt;&lt; EOF | grep”在 bash 中如何工作?

这个答案中,How does "cat << EOF" work in bash? 在 Stack Overflow 上,我得到了前两点。但我没有得到第三点Pass multi-line string to a pipeline in Bash

  1. 将多行字符串传递到 Bash 中的管道

     $ cat <<EOF | grep 'b' | tee b.txt
     foo
     bar
     baz
     EOF
    
    Run Code Online (Sandbox Code Playgroud)

因为它有 3 个单词,2 个管道字符。然后我不知道如何解释它。

bash pipe io-redirection here-document

10
推荐指数
2
解决办法
5490
查看次数

标签 统计

here-document ×10

bash ×7

shell-script ×3

cat ×1

documentation ×1

files ×1

io-redirection ×1

make ×1

pipe ×1

read ×1

readonly ×1

sed ×1

shell ×1

tee ×1

tmp ×1