我有一个运行源代码的bash构建脚本,因此可以激活Python虚拟环境。我首先使用进行单元测试python3.7 -m unittest
。但是,如果这些都失败了,我就不想运行主程序。因此,我需要停用虚拟环境(这样终端才能回到其原始状态),然后return 1
退出构建脚本。
所以我的脚本看起来像这样
# activate virtual env ...
python3.7 -m unittest || deactivate; return 1;
python3.7 app.py
deactivate
Run Code Online (Sandbox Code Playgroud)
当单元测试失败时,python3.7 -m unittest
将返回1
并按预期停用虚拟环境。
当单元测试成功运行时,python3.7 -m unittest
返回0
,但是奇怪的是管道的右侧似乎在运行。我还没有弄清楚bash或bash是否很奇怪,deactivate
但是这里有一些行为示例:
(exit 0) || deactivate; echo "Tests failed"; return 1; (Output: "Tests failed", deactivate not run)
(exit 0) || echo "Deactivating"; deactivate; echo "Tests failed"; return 1; (Output: "Tests failed", deactivate ran)
(exit 0) || echo "Tests failed"; return 1; (Output: …
Run Code Online (Sandbox Code Playgroud) 我试图接受用户对问题的输入是或否,并根据答案读回我的变量值。我永远无法让附加到变量的命令起作用,或者我的 if 语句接受是或否。它只是继续“不是一个有效的答案”。请让我知道如何真正让它们在 bash 脚本中工作。我一直在寻找不同的东西来尝试,但似乎没有任何效果。这是我现在所拥有的:
yesdebug='echo "Will run in debug mode"'
nodebug='echo "Will not run in debug mode"'
echo "Would you like to run script in debug mode? (yes or no)"
read yesorno
if [$yesorno == 'yes']; then
$yesdebug
elif [$yesorno == 'no']; then
$nodebug
else
echo "Not a valid answer."
exit 1
fi
Run Code Online (Sandbox Code Playgroud) 尽管函数处于退出状态,但测试用例还是失败了:
#!/bin/bash
fun() {
return 0
}
fun && echo "true" || echo "false" #result: true
[[ `fun` ]] && echo "true" || echo "false" #result: false
Run Code Online (Sandbox Code Playgroud)
使用 echo 命令测试我们可以看到退出状态并没有像我们预期的那样改变结果:
#!/bin/bash
echo "orange" 1>/dev/null && echo "true" || echo "false" #result: true
[[ `echo "orange "` ]] && echo "true" || echo "false" #result: true
echo 1>/dev/null && echo "true" || echo "false" #result: true
[[ `echo ` ]] && echo "true" || echo "false" #result: false
Run Code Online (Sandbox Code Playgroud)
什么会导致这种行为?
我需要检查文件是否包含特定的两个字符串,如果包含,则删除它们之间的所有文本(包括字符串)。假设我有一个text
看起来像这样的文件:
line of text
line of text
line of text
line of text
#1st string
line of text
line of text
line of text
#2nd string
Run Code Online (Sandbox Code Playgroud)
现在我想删除#1st string
和#2nd string
和这两个字符串之间的所有行。
我尝试将整个文本放入一个变量中,然后像这样删除它们:
line of text
line of text
line of text
line of text
#1st string
line of text
line of text
line of text
#2nd string
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,因为文本文件包含一些命令,它们以某种方式列出当前目录的内容并将输出混合到变量中,从而使文件损坏。我可以以某种方式防止这种情况发生,还是有更好的方法来完全实现这一目标?
我正在尝试使用 eval 设置多行变量
$ k="A
B
C"
$ echo "$k"
A
B
C
$ eval 'k="1
2
3"'
$ echo "$k"
1
2
3
Run Code Online (Sandbox Code Playgroud)
但我想使用 awk 通过 awk 脚本生成我的变量
$ echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'
awkV="1
2
3"
$ eval `echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'`
$ echo "$awkV"
1 2 3
$ eval '`echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'`'
-bash: unexpected EOF while looking for matching ``'
-bash: syntax error: unexpected end of file
bash: …
Run Code Online (Sandbox Code Playgroud) 我正在运行以下Perl脚本:
#!/usr/bin/env perl
$file1 = $ARGV[0];
system("analyze $file1 M | grep Moments -A 4 > inertia.dat");
open(INFILE, "inertia.dat") or die "Can't open file: $!";
$line = <INFILE>;
$line = <INFILE>;
$line = <INFILE>;
$line = <INFILE>;
$line = <INFILE>;
$I1 = substr($line,16,12);
$line = <INFILE>;
$I2 = substr($line,16,12);
$line = <INFILE>;
$I3 = substr($line,16,12);
$line = <INFILE>;
if (($I1>$I2) && ($I1>$I3)) {$I1 = <Imax>;}
if (($I2>$I1) && ($I2>$I3)) {$I2 = <Imax>;}
if (($I3>$I1) && ($I31>$I2)) {$I3 = <Imax>;}
if (($I1<$I2) …
Run Code Online (Sandbox Code Playgroud) 我有需要在管道之间匹配的文本.我试过了\|[^|]+\|
,但似乎没有收集每一个.
|N/A|text123|text1235|Medium|1|Medium|test123|test456|test|test|test|http|tcp|
Run Code Online (Sandbox Code Playgroud) 该值为空?file=hello;
。
有了?file=hello
,就可以了。
我试过这个:
err := r.ParseForm()
fmt.Println(err)
fileName := r.FormValue("file")
Run Code Online (Sandbox Code Playgroud)
和
var err error
r.Form, err = url.ParseQuery(r.URL.String())
fmt.Println(err)
fileName = r.FormValue("file")
Run Code Online (Sandbox Code Playgroud)
但我得到
error:invalid semicolon separator in query
Run Code Online (Sandbox Code Playgroud)
我希望表格包含map[file:[hello;]]
,但我得到的map[]
是PostForm
和Form
。
STL size()
函数使用哪种算法或思想来查找C++中字符串或向量的大小?
我知道工作strlen()
依赖于NUL
在C风格的char数组中查找字符,但我想知道该size()
函数如何工作以查找非空终止的字符串的大小,如我们所知.
STL容器是否使用某种指针来标记容器的结尾?
这有助于找到尺寸或其他东西吗?
你觉得它在Ubuntu的可能,而不是打字的python3 test.py
我想运行一个脚本每次使用简写形式,例如是这样的:py test.py
?换句话说,我想要的是为它做一个简写命令python3
应该是这样的:py
.我能这样做吗?
我有这段代码
a := 32
fmt.Printf("%d", a)
Run Code Online (Sandbox Code Playgroud)
输出是
32%
Run Code Online (Sandbox Code Playgroud)
当有人会期待
32
Run Code Online (Sandbox Code Playgroud)
会不会是终端效应?我正在使用 zsh。