标签: bash

使用 grep 对文件进行排序

我有数百个输出文件,其中一些包含错误消息。假设我想自动将包含字符串“ERROR_1”的所有文件放在“subfolder_1”中,其余文件放在第二个“subfolder_2”中。这应该可以通过管道 grep 以某种方式实现。什么是有用的语法?

bash grep sorting pipe

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

从bash脚本调用历史时“历史位置超出范围”

我想制作一个简单的脚本bash_history,根据用户输入的行号从 中删除一行。

echo -n "Delete History Line Number: "
read num
history -d $num
Run Code Online (Sandbox Code Playgroud)

错误是“历史位置超出范围”(它不应该是,我使用的是范围内的数字)。

为什么这不起作用?

bash command-history

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

Linux:对一批文件运行命令,输出文件匹配

一个简单的任务:给定一个文件目录和一个将一个文件作为输入并生成一个文件作为输出的命令,我想一次处理一个目录中的所有文件,并用相应的匹配名称(带有新的扩展名)输出它们。

所以如果命令通常是:

convert -input sourceFile.ext -output destFile.out
Run Code Online (Sandbox Code Playgroud)

我想处理一个文件夹

file1.ext, file2.ext, etc.
Run Code Online (Sandbox Code Playgroud)

并在相同的目录中生成文件

file1.out, file2.out, etc.
Run Code Online (Sandbox Code Playgroud)

有没有办法在终端中做到这一点而无需编写 bash 脚本?我对脚本不是很熟悉,所以任何简单的解决方案都将不胜感激。

linux script bash batch command-line

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

如果目录为空,则执行此操作,如果目录不为空,则执行此操作

到目前为止,我已经有了这个。有没有更有效的方法?

if ls -1 $HOME/path/to/folder/* >/dev/null 2>&1
then
        echo Directory is not empty.
else
        echo Directory is empty.
fi
Run Code Online (Sandbox Code Playgroud)

bash

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

如何知道我是否在使用 Java EE?

今天我通过.sh官方 Oracle 源下载文件并使用sudo sh filename.sh命令运行它来安装 Java EE 。

但是,我的 Linux Mint 机器中有多个版本的 Java,我在使用以下命令时可以访问这些版本sudo update-alternatives --config java

There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-oracle/jre/bin/java          1074      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
* 2            /usr/lib/jvm/java-7-oracle/jre/bin/java          1074      manual mode

Press enter to keep the current choice[*], or type selection number: 
Run Code Online (Sandbox Code Playgroud)

当我使用java -version命令时,这就是我得到的:

$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment …
Run Code Online (Sandbox Code Playgroud)

linux java bash eclipse

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

从脚本中打开新的 konsole,执行命令并在结束时变得可交互

我希望能够获得一个脚本(在启动时运行)来打开konsole终端。
当它打开时,它会做一些持久的事情(比如更改目录和源 bashrc)并运行一个长时间运行的程序。
如果程序崩溃或我进来了<ctrl+c>,它会开始接受来自标准输入的命令(例如“向上输入”以再次尝试,就好像它一直是交互式的一样)。

我已经尝试了很多方法来让它工作(我目前只是试图让它ls并在完成时恢复到交互式);

konsole -e ls
konsole --hold ls
konsole -e /bin/bash -c ls
konsole --hold -e "/bin/bash -c ls"
konsole -e "/bin/bash -i -c ls"
konsole -e /bin/bash -i -c ls
konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"

echo ls > /tmp/konsolebash
konsole -e "/bin/bash -i --rcfile /tmp/konsolebash"
Run Code Online (Sandbox Code Playgroud)

跟引号有关吗?我不应该使用它们,我应该逃避什么吗?
我什至打算尝试执行bash吗?
我的想法用完了,但我希望它甚至可以实现(但希望不是我错过的令人尴尬的简单)。

如果konsole特别是问题,我会赞成成功使用其他终端模拟器的答案(但由于问题具体是关于konsole我认为我不能给你多汁的勾号)

bash automation konsole interactive

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

bash 脚本中的 ls 命令显示“没有这样的文件或目录”

以下是我正在运行的脚本

#$1 - Argument
declare IPATH="sample/"
declare F=$IPATH$1
echo $F
ls $F
Run Code Online (Sandbox Code Playgroud)

输入是 ./script.sh "Fil*"

回声输出是 -

sample/Fil*
Run Code Online (Sandbox Code Playgroud)

当我运行命令时,ls sample/Fil*我得到了所需的输出 - 名称以 FIL 开头且位于示例文件夹中的文件列表,如下所示 -

sample/File  sample/File1  sample/File2
Run Code Online (Sandbox Code Playgroud)

但是脚本会引发以下异常。我究竟做错了什么?

ls: sample/Fil*: No such file or directory ls: $IPATH: No such file or directory
Run Code Online (Sandbox Code Playgroud)

linux bash command-line ls

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

防止 BASH 中的大括号创建子外壳

我需要大括号来指定表达式的计算优先级,但我不希望大括号创建子脚本。看看当示例代码运行时会发生什么:

示例脚本

#!/bin/bash

false || (echo "First" && exit 1)
false || (echo "Second" && exit 2)
exit 3
Run Code Online (Sandbox Code Playgroud)

输出

First
Second
Run Code Online (Sandbox Code Playgroud)

似乎大括号创建子脚本,其中退出不会导致主脚本退出。

做我想做的最优雅的方式是什么?最好没有块和嵌套。谢谢!

linux bash shell braces

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

cat “输入文件是输出文件”,同时尝试将多个文件合并为一个

计划是将 Java 的所有源代码行递归地收集到一个文件中:

$ find . -name '*.java' | xargs cat >> all.java
Run Code Online (Sandbox Code Playgroud)

但是出现了一个错误:

cat: ./all.java: input file is output file
Run Code Online (Sandbox Code Playgroud)

该文件all.java在此命令之前不存在,所以我认为可能xargs正在尝试运行cat >> all.java file1 file2 file3 ...

bash redirection command-line xargs syntax

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

在 Fedora 上使用源命令时出现“找不到命令”

我正在使用 Fedora。当我发出:

-bash-3.2$ source na-profile.conf
Run Code Online (Sandbox Code Playgroud)

我得到:

: command not found
: command not found
: command not found
Run Code Online (Sandbox Code Playgroud)

na-profile.conf 文件如下所示:

KEYTAB=server02 export KEYTAB;
ORACLE_HOME=/home/oracle/app/xxxx/11.2.0.1/yyyyy; export ORACLE_HOME;
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN;
PATH=$PATH:$ORACLE_HOME/bin
Run Code Online (Sandbox Code Playgroud)

文件中没有多余的行或空格。

linux fedora bash

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