在命令行中,我可以比较两个命令的输出
$ 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。
我刚刚在我的 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 …
我有一个名为的脚本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在计算机启动时在后台自动执行。
我可以将代码打印到 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包含三行内容的文件,保存,然后返回到交互式终端提示。
有任何想法吗?
这是一个纯粹出于好奇的问题:
我在 bash 中有一个自定义的 PS1 设置,它只是当前目录,后跟一个小写的 lambda ( ?),例如~?. 我不小心使用cat了一个二进制文件,取消了输出,随后在剩下的会话中?变成了两个日语字符??。从其他地方粘贴这个字符时,它也显示为这两个日文字符。
现在我的问题是,这个二进制文件的输出如何改变 bash 解释 Unicode 字符的方式?
让我们假设我有这样的文件:
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)
编辑我需要实现的是获取网络摄像头录制脚本的下一个文件名,这样它就不会被覆盖!
我想编写一个将消息写入控制台和日志文件的函数。我最初的尝试是这样的:
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 菜鸟,所以如果这是一个非常基本的问题,我很抱歉。我试图在超级用户上寻找其他答案,但我不确定我在寻找什么。
所以,这是我的问题。当我登录到我的 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)
命令,但我更了解发生了什么,首先改变了这一点,以及如何恢复它。
如何查找和删除.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) 我正在尝试使用一个工作系统来监视特殊日志。我通常只想要一个非常具体的模式,我使用它来提取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)
删除更多的管道让我进一步了解最新的条目。
我怎样才能避免管道中的这种缓存?