任何人都可以告诉我如何在bash中的双字符串中避免双引号?
例如在我的shell脚本中
#!/bin/bash
dbload="load data local infile \"'gfpoint.csv'\" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY \"'\n'\" IGNORE 1 LINES"
Run Code Online (Sandbox Code Playgroud)
我无法\"正确使用双引号转义来获取ENCLOSED BY .我不能对我的变量使用单引号,因为我想使用变量$dbtable.
在我的本地机器上,我运行一个包含这一行的python脚本
bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
os.system(bashCommand)
Run Code Online (Sandbox Code Playgroud)
这很好用.
然后我在服务器上运行相同的代码,我收到以下错误消息
'import site' failed; use -v for traceback
Traceback (most recent call last):
File "/usr/bin/cwm", line 48, in <module>
from swap import diag
ImportError: No module named swap
Run Code Online (Sandbox Code Playgroud)
所以我所做的就是插入一个"print bashCommand",它在使用os.system()运行它之前打印我,而不是终端中的命令.
当然,我再次得到错误(由os.system(bashCommand)引起)但在该错误之前它在终端中打印命令.然后我只是复制了那个输出并在终端上做了一个复制粘贴,然后点击回车就可以了......
有没有人知道发生了什么?
我用subprocess模块调用不同的进程.但是,我有一个问题.
在以下代码中:
callProcess = subprocess.Popen(['ls', '-l'], shell=True)
Run Code Online (Sandbox Code Playgroud)
和
callProcess = subprocess.Popen(['ls', '-l']) # without shell
Run Code Online (Sandbox Code Playgroud)
两者都有效.阅读文档后,我开始知道这shell=True意味着通过shell执行代码.这意味着在缺席的情况下,该过程将直接启动.
那么我应该更喜欢我的情况 - 我需要运行一个进程并获得其输出.从shell内部或外部调用它有什么好处.
我想迭代一个文件列表.这个列表是find命令的结果,所以我想出了:
getlist() {
for f in $(find . -iname "foo*")
do
echo "File found: $f"
# do something useful
done
}
Run Code Online (Sandbox Code Playgroud)
没关系,除非文件名中有空格:
$ ls
foo_bar_baz.txt
foo bar baz.txt
$ getlist
File found: foo_bar_baz.txt
File found: foo
File found: bar
File found: baz.txt
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能避免空格分裂?
我找不到任何一个简单直接的资源,用于解释以下BASH shell错误的含义和修复,所以我发布了我在研究之后发现的内容.
错误:
-bash: [: too many arguments
Run Code Online (Sandbox Code Playgroud)
Google友好版: bash open square bracket colon too many arguments.
上下文:单个方括号中的if条件,带有一个简单的比较运算符,如equals,大于等,例如:
VARIABLE=$(/some/command);
if [ $VARIABLE == 0 ]; then
# some action
fi
Run Code Online (Sandbox Code Playgroud) 使用xenserver,我想对目录中的每个文件执行命令,从命令输出中删除一些东西并将其附加到文件中.
我清楚我想要使用的命令以及如何根据需要grep out string.
但是我不清楚的是我如何让它在每个文件上执行此命令,转到下一个文件,直到找不到更多文件.
是否有任何需要在Bash中转义的完整字符列表?可以用它来检查sed吗?
特别是,我正在检查是否%需要转义.我试过了
echo "h%h" | sed 's/%/i/g'
Run Code Online (Sandbox Code Playgroud)
工作得很好,没有逃脱%.这是否意味着%不需要逃脱?这是检查必要性的好方法吗?
而更普遍的:它们是相同的字符,以逃避shell和bash?
我var在一个包含字符串的Bash脚本中有一个变量,如:
echo $var
"some string.rtf"
Run Code Online (Sandbox Code Playgroud)
我想删除此字符串的最后4个字符并将结果分配给新变量var2,以便
echo $var2
"some string"
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我的Bash脚本中的以下行
echo $AAAA" "$DDDD" "$MOL_TAG >> ${OUPUT_RESULTS}
Run Code Online (Sandbox Code Playgroud)
给我这个错误:
line 46: ${OUPUT_RESULTS}: ambiguous redirect
Run Code Online (Sandbox Code Playgroud)
为什么?