我需要编写一个脚本来输入程序的多行输入(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,我知道>文件的输出,>>附加到文件,<从文件读取输入.
究竟做<<了什么?
它有一个手册页吗?
如何在不使用多个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内置.
假设我有一个非常长的字符串,其中包含我想要创建的参数.我知道你可以创建一个多行字符串
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多个参数的超长字符串,我怎么能在多行中传递这些参数呢?将它们传递到一行就会破坏甚至尝试创建多行字符串的目的.
感谢任何人提前获得他们的帮助和见解.
我需要扩展一个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代码指定为多行字符串,然后执行它.
我无法弄清楚如何缩进 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) 我有一些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)
线条在那里,但压痕消失了.