标签: bash

如何区分shell脚本中两个命令的重定向

在命令行中,我可以比较两个命令的输出

$ diff <(cmd1) <(cmd2)
Run Code Online (Sandbox Code Playgroud)

但如果我把它放在一个 shell 脚本中

$ sh do_two_comands_diff.sh
Run Code Online (Sandbox Code Playgroud)

这是行不通的

$ diff <(ls) <(ls -a)
0a1,2
> .
> ..

$ cat > test_diff.sh
diff <(ls) <(ls -a)
^D

$ sh test_diff.sh
test_diff.sh:1: test_diff.sh: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)

我尝试使用 $() 代替 () ,但没有成功。我知道在 shell 内部有时需要以与在控制台中不同的方式来完成,但在这里我没有任何线索。有人可以这么好心地将我指向正确的链接,以了解如何在 shell 中正确执行这些操作,以及为什么会发生这种情况?

P。

linux bash shell command-line

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

如何在 Linux shell 中重新控制单独的进程?

我刚刚在我的 VPS 上为我的兄弟设置了一个 Minecraft 服务器,并使用 bash 脚本运行它:
sh ./server.sh&

这样,服务器正在运行,我仍然可以使用腻子在同一命令行上工作。但是如果我想向 Minecraft 服务器输入命令怎么办?我如何在控制台屏幕上恢复它:
[10:17:23] [Server thread/INFO]: Starting minecraft server version 1.7.10 [10:17:23] [Server thread/INFO]: Loading properties [10:17:23] [Server thread/INFO]: Default game type: SURVIVAL [10:17:23] [Server thread/INFO]: Generating keypair [10:17:24] [Server thread/INFO]: Starting Minecraft server on *:25565 [10:17:24] [Server thread/INFO]: Preparing level "world" [10:17:24] [Server thread/INFO]: Preparing start region for level 0 [10:17:25] [Server thread/INFO]: Preparing spawn area: 52% [10:17:26] [Server thread/INFO]: Preparing spawn area: 99% [10:17:26] [Server thread/INFO]: Done (2.132s)! For …

linux debian bash shell

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

如何自动运行 bash 脚本?

我有一个名为的脚本run.sh

#!/bin/bash
cd /root/yowsup-master/src/
./yowsup-cli --interactive no --wait --autoack --config config.example
Run Code Online (Sandbox Code Playgroud)

此脚本执行另一个脚本。

我尝试添加我的脚本路径,/etc/rc.local但它似乎不起作用。

我还将它添加到Kali Linux 的启动应用程序中,它也不起作用。

我希望我run.sh在计算机启动时在后台自动执行。

bash kali-linux

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

linux cat 进入文件,包括所有从复制+粘贴中退出的代码

我可以将代码打印到 STDOUT 来模拟 Ctrl+c 内部的行为cat吗?例如,我希望我的脚本打印出cat命令,后跟文件的内容,如下所示:

cat > /my/file/name.txt
I want this line in the filename above
and this one
and this one as well but I want to exit cat in the next line
Ctrl+c somehow
Run Code Online (Sandbox Code Playgroud)

我想要的行为是让用户复制上面的行,然后将它们粘贴到终端窗口中,无需再打字,就有一个name.txt包含三行内容的文件,保存,然后返回到交互式终端提示。

有任何想法吗?

linux bash command-line cat

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

`cat` 的某些输出如何改变 bash 中 unicode 字符的解释方式?

这是一个纯粹出于好奇的问题:

我在 bash 中有一个自定义的 PS1 设置,它只是当前目录,后跟一个小写的 lambda ( ?),例如~?. 我不小心使用cat了一个二进制文件,取消了输出,随后在剩下的会话中?变成了两个日语字符??。从其他地方粘贴这个字符时,它也显示为这两个日文字符。

现在我的问题是,这个二进制文件的输出如何改变 bash 解释 Unicode 字符的方式?

bash unicode

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

使用bash自动生成文件名

让我们假设我有这样的文件:

out-1.avi
Run Code Online (Sandbox Code Playgroud)

我想要一段 bash 代码,它将为我提供此类列表的下一个文件名:

out-1.avi
out-2.avi
out-3.avi
etc.
Run Code Online (Sandbox Code Playgroud)

编辑我需要实现的是获取网络摄像头录制脚本的下一个文件名,这样它就不会被覆盖!

linux file-management bash

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

如何编写一个同时写入控制台和日志文件的函数?

我想编写一个将消息写入控制台和日志文件的函数。我最初的尝试是这样的:

function log_write {
    local message=$1
    local log_file=$2
    echo "${message}" | tee -a ${log_file}
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用 - 我猜是因为函数上下文中的 echo 意味着“返回一个值”,而不是写入控制台。我错过了什么?我在我的脚本中这样调用它:

message='something interesting happened'
log_file='my_script.log'
$(log_write $message $log_file)
Run Code Online (Sandbox Code Playgroud)

另外,我通过 msysgit 端口在 Windows 上运行它,但我把这个问题加倍了。

linux bash

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

我必须手动启动 bash

我有点 Linux 菜鸟,所以如果这是一个非常基本的问题,我很抱歉。我试图在超级用户上寻找其他答案,但我不确定我在寻找什么。

所以,这是我的问题。当我登录到我的 vpn 服务器时,它不再自动打开 bash。相反,它只是给了我

$ 
Run Code Online (Sandbox Code Playgroud)

代替

$ user@host / location 
Run Code Online (Sandbox Code Playgroud)

当我使用 root 用户登录时,它实际上在登录时加载了 bash。我可以使用以下命令手动加载 bash

/bin/bash
Run Code Online (Sandbox Code Playgroud)

命令,但我更了解发生了什么,首先改变了这一点,以及如何恢复它。

linux vpn bash

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

如何递归删除所有 JPG 文件,但保留包含“样本”的文件

如何查找和删除.jpg目录树中的所有文件,但文件名中包含“sample”的文件除外?

例如 :

a.zip          ->  keep it  
b.jpg          ->  delete it  
a-sample.jpg   ->  keep it  
b-Sample.jpg   ->  keep it  
Run Code Online (Sandbox Code Playgroud)

linux bash regex rm

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

带有来自 tail -f 的管道的 grep 和 sed 似乎正在缓存

我正在尝试使用一个工作系统来监视特殊日志。我通常只想要一个非常具体的模式,我使用它来提取grep和从tail -f. 我注意到 grep 不会输出所有内容,而是保留一些行缓冲。我想如果您有一个管道可以输出所有内容,然后终止并关闭流,那这很有意义。
但是tail -f这对我来说不起作用。

出现同样的问题sed

这是我要使用的示例命令:

clear && tail -F -n1000 /var/log/fail2ban.log | grep 'WARNING.*Ban' | sed s/'fail2ban.actions: WARNING '//g | grep -E --color 'ssh-iptables-perma|$'
Run Code Online (Sandbox Code Playgroud)

提供一个例子:

上面命令的最后一行是这样的:

2015-05-04 11:17:24,551 [ssh-iptables] Ban x.x.x.x
Run Code Online (Sandbox Code Playgroud)

并使用此命令:

clear && tail -F -n1000 /var/log/fail2ban.log | grep 'WARNING.*Ban' | sed s/'fail2ban.actions: WARNING '//g
Run Code Online (Sandbox Code Playgroud)

最后一行是这样的:

2015-05-04 19:45:17,615 [ssh-iptables] Ban y.y.y.y
Run Code Online (Sandbox Code Playgroud)

删除更多的管道让我进一步了解最新的条目。

我怎样才能避免管道中的这种缓存?

linux bash grep sed command-line

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

标签 统计

bash ×10

linux ×8

command-line ×3

shell ×2

cat ×1

debian ×1

file-management ×1

grep ×1

kali-linux ×1

regex ×1

rm ×1

sed ×1

unicode ×1

vpn ×1