小编Ben*_* W.的帖子

双管道运算符和python virtualenv的奇怪行为

我有一个运行源代码的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)

python bash

0
推荐指数
1
解决办法
54
查看次数

如果语句在 bash 脚本中接受是或否?

我试图接受用户对问题的输入是或否,并根据答案读回我的变量值。我永远无法让附加到变量的命令起作用,或者我的 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)

linux bash if-statement conditional-statements

0
推荐指数
1
解决办法
382
查看次数

为什么 Bash 测试用例没有一致地反映命令的退出状态?

尽管函数处于退出状态,但测试用例还是失败了:

#!/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)

什么会导致这种行为?

bash

0
推荐指数
1
解决办法
51
查看次数

从文件中删除所有行,以特定字符串开头和结尾

我需要检查文件是否包含特定的两个字符串,如果包含,则删除它们之间的所有文本(包括字符串)。假设我有一个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)

不幸的是,这不起作用,因为文本文件包含一些命令,它们以某种方式列出当前目录的内容并将输出混合到变量中,从而使文件损坏。我可以以某种方式防止这种情况发生,还是有更好的方法来完全实现这一目标?

linux bash

0
推荐指数
1
解决办法
62
查看次数

使用 Eval 将变量设置为等于多行字符串

我正在尝试使用 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)

bash awk eval

0
推荐指数
1
解决办法
59
查看次数

运行perl脚本时非法除零

我正在运行以下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)

perl

-1
推荐指数
1
解决办法
1101
查看次数

正则表达式在多个管道中收集文本

我有需要在管道之间匹配的文本.我试过了\|[^|]+\|,但似乎没有收集每一个.

|N/A|text123|text1235|Medium|1|Medium|test123|test456|test|test|test|http|tcp|
Run Code Online (Sandbox Code Playgroud)

regex perl pcre regex-lookarounds

-1
推荐指数
1
解决办法
67
查看次数

为什么我的表单值包含分号时为空?

该值为空?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[]PostFormForm

http go

-1
推荐指数
1
解决办法
87
查看次数

STL size()使用什么算法来查找字符串或向量的大小?

STL size()函数使用哪种算法或思想来查找C++中字符串或向量的大小?

我知道工作strlen()依赖于NUL在C风格的char数组中查找字符,但我想知道该size()函数如何工作以查找非空终止的字符串的大小,如我们所知.

STL容器是否使用某种指针来标记容器的结尾?

这有助于找到尺寸或其他东西吗?

c++ string stl

-3
推荐指数
1
解决办法
168
查看次数

是否可以在Linux的命令行中使用"py"而不是"python"?

你觉得它在Ubuntu的可能,而不是打字的python3 test.py我想运行一个脚本每次使用简写形式,例如是这样的:py test.py?换句话说,我想要的是为它做一个简写命令python3应该是这样的:py.我能这样做吗?

linux bash ubuntu

-3
推荐指数
1
解决办法
862
查看次数

-3
推荐指数
1
解决办法
306
查看次数