相关疑难解决方法(0)

"猫<< EOF"如何在bash中运作?

我需要编写一个脚本来输入程序的多行输入(psql).

经过一段谷歌搜索后,我发现以下语法有效:

cat << EOF | psql ---params
BEGIN;

`pg_dump ----something`

update table .... statement ...;

END;
EOF
Run Code Online (Sandbox Code Playgroud)

这正确地构造了多行字符串(从包含BEGIN;END;包含),并将其作为输入进行管道输入psql.

但是我不知道它是如何/为什么有效的,有人可以解释一下吗?

我主要是指cat << EOF,我知道>文件的输出,>>附加到文件,<从文件读取输入.

究竟做<<了什么?

它有一个手册页吗?

linux bash scripting heredoc

548
推荐指数
9
解决办法
82万
查看次数

如何在Bash中输出多行字符串?

如何在不使用多个echo调用的情况下在Bash中输出多行字符串,如下所示:

echo "usage: up [--level <n>| -n <levels>][--help][--version]"
echo 
echo "Report bugs to: "
echo "up home page: "
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种可移植的方式,只使用Bash内置.

bash

218
推荐指数
9
解决办法
21万
查看次数

带参数的多行字符串.怎么申报?

假设我有一个非常长的字符串,其中包含我想要创建的参数.我知道你可以创建一个多行字符串

cmd = """line 1
      line 2
      line 3"""
Run Code Online (Sandbox Code Playgroud)

但现在让我说我想传递1,2和3作为参数.

这有效

cmd = """line %d
      line %d
      line %d""" % (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

但是如果我有一个包含30多个参数的超长字符串,我怎么能在多行中传递这些参数呢?将它们传递到一行就会破坏甚至尝试创建多行字符串的目的.

感谢任何人提前获得他们的帮助和见解.

python

54
推荐指数
7
解决办法
6万
查看次数

如何从bash脚本执行多行python代码?

我需要扩展一个shell脚本(bash).由于我对python更熟悉,我想通过编写一些python代码来实现这一点,这些代码依赖于shell脚本中的变量.添加额外的python文件不是一种选择.

result=`python -c "import stuff; print('all $code in one very long line')"` 
Run Code Online (Sandbox Code Playgroud)

不太可读.

我更喜欢将我的python代码指定为多行字符串,然后执行它.

python bash multiline

7
推荐指数
2
解决办法
3005
查看次数

删除起始空格制表符输出 echo 多行字符串

我无法弄清楚如何缩进 bash 脚本的部分内容,从而在代码中保留缩进。我希望输出格式正确,输出行没有任何制表符/空格前缀。

例如:脚本

#!/bin/bash

INFO1="something
output1"
INFO2="output2"
MY_INFO=INFO1

if [ True ]; then
    INFO="
    Here are the test results
    bbb
    ccc
    aaa
    ${!MY_INFO}
    " 
fi
echo "${INFO}"
Run Code Online (Sandbox Code Playgroud)

输出返回:

    Here are the test results
    bbb
    ccc
    aaa
    something
output1
Run Code Online (Sandbox Code Playgroud)

预期输出:

Here are the test results
bbb
ccc
aaa
something
output1
Run Code Online (Sandbox Code Playgroud)

bash shell

5
推荐指数
1
解决办法
1685
查看次数

插入多行并使用sed保持缩进

我有一些Tython函数要插入文件中.插入多行本身可以很好地使用变量和一些\n,但不保留缩进.因为它是Python代码,这是一个大问题,代码无法正常工作.

这是我尝试过的:

cat sed-insertlines.sh

#!/bin/bash

read -r -d '' lines_to_insert << 'EOF'
def string_cleanup(x, notwanted):\n
    for item in notwanted:\n
        x = re.sub(item, '', x)\n
    return x\n
EOF

lines_to_insert=$(echo ${lines_to_insert} )

sed  -i "/import re  # Regular Expression library/a $lines_to_insert" sed-insertlines.txt
Run Code Online (Sandbox Code Playgroud)

但是我最终得到的是cat sed-insertlines.txt:

#!/bin/python

import re  # Regular Expression library
def string_cleanup(x, notwanted):
 for item in notwanted:
 x = re.sub(item, '', x)
 return x


def string_replace(i_string, pattern, newpattern):
    string_corrected = re.sub(pattern, newpattern, i_string)
    return string_corrected
Run Code Online (Sandbox Code Playgroud)

线条在那里,但压痕消失了.

bash sed insert

2
推荐指数
1
解决办法
1626
查看次数

标签 统计

bash ×5

python ×2

heredoc ×1

insert ×1

linux ×1

multiline ×1

scripting ×1

sed ×1

shell ×1