我有数百个输出文件,其中一些包含错误消息。假设我想自动将包含字符串“ERROR_1”的所有文件放在“subfolder_1”中,其余文件放在第二个“subfolder_2”中。这应该可以通过管道 grep 以某种方式实现。什么是有用的语法?
我想制作一个简单的脚本bash_history,根据用户输入的行号从 中删除一行。
echo -n "Delete History Line Number: "
read num
history -d $num
Run Code Online (Sandbox Code Playgroud)
错误是“历史位置超出范围”(它不应该是,我使用的是范围内的数字)。
为什么这不起作用?
一个简单的任务:给定一个文件目录和一个将一个文件作为输入并生成一个文件作为输出的命令,我想一次处理一个目录中的所有文件,并用相应的匹配名称(带有新的扩展名)输出它们。
所以如果命令通常是:
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 脚本?我对脚本不是很熟悉,所以任何简单的解决方案都将不胜感激。
到目前为止,我已经有了这个。有没有更有效的方法?
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) 今天我通过.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) 我希望能够获得一个脚本(在启动时运行)来打开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我认为我不能给你多汁的勾号)
以下是我正在运行的脚本
#$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) 我需要大括号来指定表达式的计算优先级,但我不希望大括号创建子脚本。看看当示例代码运行时会发生什么:
#!/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)
似乎大括号创建子脚本,其中退出不会导致主脚本退出。
做我想做的最优雅的方式是什么?最好没有块和嵌套。谢谢!
计划是将 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 ...
我正在使用 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)
文件中没有多余的行或空格。
bash ×10
linux ×5
command-line ×3
automation ×1
batch ×1
braces ×1
eclipse ×1
fedora ×1
grep ×1
interactive ×1
java ×1
konsole ×1
ls ×1
pipe ×1
redirection ×1
script ×1
shell ×1
sorting ×1
syntax ×1
xargs ×1