相关疑难解决方法(0)

我想在字符串中嵌入单引号

通常,为了在字符串中嵌入引号,\使用(反斜杠)。

反斜杠在 Bash 脚本中是否有不同的含义?

我的下面的代码不起作用:未包含引号,并报告了以下错误:

recursive_merge.sh: line 7: unexpected EOF while looking for matching `''
recursive_merge.sh: line 14: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

我没有解释。14号线根本不存在。

 #!/bin/bash
#############this file should be in the directory directly upper than p0x. sphnum.txt should also be at the same directory
for i in 02 03 04 05 06 07 09 10 11 12 13 14 15 16 17 20 21 22 23 24 25; do
 x=$(grep $i sphnum.txt |cut -c5-6)
 y=$(grep $i sphnum.txt …
Run Code Online (Sandbox Code Playgroud)

linux bash sh

4
推荐指数
1
解决办法
3075
查看次数

echo 中的 Makefile 变量赋值错误

我有这样的文件目标

foo: 
    i = 1
    @echo $(i)
Run Code Online (Sandbox Code Playgroud)

当我像这样运行 make 文件时:

$ make foo 
Run Code Online (Sandbox Code Playgroud)

i = 1
make: i: 命令未找到
Makefile:2: 目标 'foo' 的配方失败
make: [foo] 错误 127

但是如果我不给分配空间(即)

i=1
Run Code Online (Sandbox Code Playgroud)

然后没有错误但没有输出,不打印 i 的值

makefile

4
推荐指数
2
解决办法
2639
查看次数

忽略 Bash 脚本中 Source 命令的失败

所以我知道有很多关于堆栈溢出的答案可以忽略 bash 脚本中的错误。不过,它们似乎都不适用于 source 命令。

我已经尝试过久经考验的 source ../bin/activate || true

set -e在运行命令之前尝试过设置

我试过了 source ../bin/activate 2>&1 /dev/null

set +e在运行命令之前尝试过设置。这也不起作用。

但是在这段代码的每次运行中,我都会收到

run.01: line 12: ../bin/activate: 没有那个文件或目录

这个问题的上下文是我正在创建一个运行一些 python 代码的简单 bash 脚本。指示用户如何创建特定的虚拟环境,如果他们正确设置,此行将自动激活它,否则,这应该忽略无法激活运行并在当前激活的任何环境中继续运行命令。

# Try virtual environment

source ../bin/activate || true

## Run.

code="../src-01/driver.v01.py"

## --------------------
graphInputFile="undirected_graph_01.inp"
graphType="undirected"
srcColId="0"
desColId="1"
degreeFind="2"
outFile="count.undirected.num.nodes.out"

python $code  -inpGraphFile $graphInputFile  -graphFormat $graphType  -colSrcId $srcColId -colDesId $desColId  -degreeFind $degreeFind  -output_file $outFile
Run Code Online (Sandbox Code Playgroud)

无论命令是否source ../bin/activate成功,python 命令都应该执行。我有点不明白为什么这些解决方案都不起作用,目前我假设在这种情况下source可能会做一些与正常命令不同的事情。

编辑:

#!/bin/bash -x按照要求将shebang添加到我的文件中,但这没有做任何事情。

这是我运行此脚本时的确切终端输出。 …

python macos bash shell terminal

4
推荐指数
2
解决办法
1651
查看次数

为什么 cURL 输出进程名称?以及如何摆脱它?

通常,当您使用 cURL 时,输出如下所示:

alex$ curl http://some-url
some-content
Run Code Online (Sandbox Code Playgroud)

但是,对于某些 url,输出是不同的:

alex$ curl http://some-url
[1] 81030
alex$ some-content
[1]+  Done                    curl http://some-url
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况以及如何摆脱它并使 cURL 仅输出内容?

bash curl

3
推荐指数
2
解决办法
655
查看次数

为什么我在shell脚本中使用双引号

我理解使用单引号和双引号.

但我不知道情况需要在脚本中加双引号.

这些陈述没有差异

$ echo hello world! $1
$ echo "hello world! $1"
Run Code Online (Sandbox Code Playgroud)

请告诉我正常和双引号之间的差异.

linux bash shell scripting

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

Linux - 检查字符串是否在列表中

我有一个 bash 脚本,我想检查一个字符串是否在列表中。比如:string = "Hello World!", List=("foo", "bar")。蟒蛇示例:

if name in list: # Another way -> if name in ["foo", "bar"]
  # work to do
else:
  sys.exit(1)
Run Code Online (Sandbox Code Playgroud)

谢谢!

linux bash shell

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

bash中获取多个空格后的字符串

我需要从头文件中提取一些信息,并且需要从如下字符串中获取站点名称:

0008 0080 LO Institution Name                 Site Name Here
Run Code Online (Sandbox Code Playgroud)

问题是网站名称也包含空格。我想到的唯一可行的方法是将行保存为字符串,然后在一定数量的字符后将站点名称作为字符串获取,如下所示:

回声 ${行:50}

但我想要更优雅的东西。

我刚刚注意到它还删除了Institution Name和之间的多个空格Site Name

string bash

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

从bash中的文件中读取星号字符(*)

我从.txt文件中获取行:Say Input.txt

a
*
b
Run Code Online (Sandbox Code Playgroud)

然后我正在阅读它:

#!/bin/bash
file=$1

ans=0
while  read -r line || [[ -n "$line" ]]
do
echo $line
done < $file # passing the file
Run Code Online (Sandbox Code Playgroud)

为此我得到以下输出

a
test main.py sic.sh
b
Run Code Online (Sandbox Code Playgroud)

显示我的目录的文件而不是*

我想根据*char来做一些决定,我需要检测/读取*?

bash

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

使用grep命令,但仅用于文件的最后几行吗?

如何仅对文件的“尾部”执行grep?

我正在尝试运行以下命令:

grep 'TEST COMPLETE' -L *.log
Run Code Online (Sandbox Code Playgroud)

TEST COMPLETE出现在最后几行中,此命令列出了文件夹中尚未完成测试的所有文件(由于-L)。日志很大,但是grep非常慢。

另一方面,我可以在尾部使用grep。grep几乎是即时的:

tail *.log | grep 'TEST COMPLETE'
Run Code Online (Sandbox Code Playgroud)

但是我不能使用-lor -L参数,因为我现在正在抓取管道输入而不是文件。因此,使用list files参数运行它:

tail *.log | grep 'TEST COMPLETE' -L
Run Code Online (Sandbox Code Playgroud)

只会输出: (standard input)

有什么办法可以让我grep搜索最后10行或类似内容吗?

bash shell grep tail

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

用于循环字符串列表的 Shell 脚本

下面是我的变量声明,在 shell 脚本中,我正在寻找一种方法来循环字符串列表以获取每个项目。

output='['a.txt', 'b.txt', 'c.txt', 'd.txt']'
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的脚本,但它没有按预期工作

for i in "${output}"; do
    echo $i
   
done
Run Code Online (Sandbox Code Playgroud)

预期结果:

a.txt
b.txt
c.txt
d.txt
Run Code Online (Sandbox Code Playgroud)

shell sh

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

标签 统计

bash ×8

shell ×5

linux ×3

sh ×2

curl ×1

grep ×1

macos ×1

makefile ×1

python ×1

scripting ×1

string ×1

tail ×1

terminal ×1