标签: bash

如何在 chown 命令上使用通配符?

我需要在 chown 命令上使用通配符。例子:

# chown app:demo /opt/app/users/*/demo
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

chown: can not access "/opt/app/users/*/demo" ': No such file or directory
Run Code Online (Sandbox Code Playgroud)

但不起作用。我能做些什么?

bash chown

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

如何在 Windows 7 上安装 ImageMagick for MinGW?

嗯...我已经在 Windows\xc2\xa07 上安装了 MinGW32(我不知道版本 - 安装在名为 Git 2.4.4.2 的文件夹中),并且我想安装 ImageMagick 来运行一些脚本,如下所示:

\n
echo " Creating different dimensions of "$1" ..."\n\nconvert $1 -resize 67% dir1/$1\nconvert $1 -resize 50% dir2/$1\nconvert $1 -resize 33% dir3/$1\nmv $1 dir0/$1\n\necho " Done"\n
Run Code Online (Sandbox Code Playgroud)\n

据我在谷歌上搜索,没有明确的详细指南如何安装它。我下载了这个ImageMagick版本:ImageMagick-i686-pc-mingw32.tar.gz

\n

官方 ImageMagick 站点指南中,我进入第一步,使用以下命令解压发行版:

\n
tar xvzf ImageMagick-i686-pc-mingw32.tar.gz\n
Run Code Online (Sandbox Code Playgroud)\n

结果我得到了一个文件夹 ImageMagick-6.8.5。\n到目前为止一切顺利。但下一步Next配置并编译ImageMagick:

\n
cd ImageMagick-6.8.5\n./configure\nmake\n
Run Code Online (Sandbox Code Playgroud)\n

我得到bash: ./configure: 没有这样的文件或目录

\n

这是我的照片:

\n

配置失败

\n

这是ls -l结果:

\n

在此输入图像描述

\n

我该如何解决这个问题?

\n

我只安装了 MinGw32,没有安装 MSYS(正如我在不太详细的指南中读到的那样)。

\n

windows bash git imagemagick mingw

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

将“perf stat”输出保存到文件中,而不保存执行命令的输出

我正在运行perf stat命令./start-server.sh -f server-config.xml

perf stat -e cache-misses ./start-server.sh -f server-config.xml

我想将perf结果保存到文件中,例如通过附加&>out.txt到命令,但是如果我将输出写入文件,那么我会同时捕获输出perfstart-server输出。有没有办法让我执行此命令,以便仅perf将输出写入输出文件?

linux bash command-line perf

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

尝试从代码中删除注释行但没有成功

尝试使用 sed 从代码中删除所有注释行:

1)/* ... *//* \n \n \n */

尝试使用这种结构来隐藏显示里面的内容

sed -n '/^\/\*/,/\*\//!p'
Run Code Online (Sandbox Code Playgroud)

但它似乎隐藏了不同行之间的内容并省略了内联/* .... */

我的意思是它在这里工作:

/******** 
This readme is intented ...
......
....
....
************/
Run Code Online (Sandbox Code Playgroud)

但它在这里不起作用:

/* Just a small bug */
Run Code Online (Sandbox Code Playgroud)

它采用第一个找到的内容并在下一行中/*继续进一步搜索:*/

/* Just a small bug */
code
code
code
/*****
To sum up this shows us...
...
...
...
...
******/
Run Code Online (Sandbox Code Playgroud)

所以“/*只是一个小错误*/”下的所有代码都被隐藏了:(我非常想念这个:

code
code
code
Run Code Online (Sandbox Code Playgroud)

2) // 内联:前面不包括 http:// 和 https://,后面包括 if

我正在尝试删除包含以下内容的字符串和部分字符串//

sed 's/\/\/.*//' …
Run Code Online (Sandbox Code Playgroud)

linux bash regex sed command-line

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

Bash:循环存储的主机名,通过 SSH 在这些主机上执行命令

我将主机名列表存储在名为 ssh_hosts.txt 的文件中。在 shell 脚本中,我循环访问 ssh_hosts.txt 中的主机名,并通过 SSH 在指定主机上执行命令。shell 脚本如下所示。

问题是脚本在处理第一个主机后退出。但是,如果我除了通过 ssh 在指定主机上执行命令之外执行其他操作,脚本将运行完成。

在下面的示例中,我注释掉了对 ssh 的调用,并将其替换为当前主机名的简单回显。这将运行直至完成。

我从 Windows 7 上的以下 Cygwin 版本下运行的 bash shell 执行此脚本:

$ uname -a
CYGWIN_NT-6.1 myHostname 1.7.16(0.262/5/3) 2012-07-20 22:55 i686 Cygwin
Run Code Online (Sandbox Code Playgroud)

涉及到的SSH版本有:

$ ssh -V
OpenSSH_6.0p1, OpenSSL 1.0.1c 10 May 2012

$ ssh myUsername@remoteHost 'ssh -V'
myUsername@remoteHost password:
OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t  3 May 2016
Run Code Online (Sandbox Code Playgroud)

这是 shell 脚本:

#!/bin/bash

if [[ $# -ne 1 ]]; then
   echo "Usage: $(basename $0) <user name>"
   exit 1
fi

USER="$1" …
Run Code Online (Sandbox Code Playgroud)

ssh cygwin bash openssh bash-scripting

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

如何仅在进程失败时重新启动进程,而在正常退出(或具有某些返回代码)时则不重新启动进程?

我遇到一个奇怪的问题,可能与硬件初始化有关。我正在开发一个基于 Java 的自动数据采集系统,该系统在带有 Ubuntu 16.04 的 SBC 上运行。数据采集​​程序目前是通过 cron 启动的,尽管我打算切换到 systemd。

如果我重新启动系统,它就会启动并运行良好。但是,如果断电并冷启动(这是正常方式),程序将崩溃并出现错误free(): corrupted unsorted chunks。如果我再次启动它,它似乎运行良好。我需要找出原因,希望能找出原因,但这可能需要一些时间,同时系统需要进一步测试,我需要一种解决方法,可以在崩溃时重新启动它。仅添加延迟并没有帮助。

我想做的是重新启动 Java 进程或从 bash 包装脚本重新启动系统,但前提是它崩溃了。如果它以零退出代码退出(或者,理想情况下,以预定的允许退出代码集中的任何代码退出),则不应重新启动它,并且脚本也应退出。

java bash ubuntu bash-scripting

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

bash:在 Tmux 中执行阻塞脚本

我尝试从 bash 文件在 2 个不同的 TMUX 窗格中运行 2 个脚本。问题是它们都是阻塞的,所以一旦我从一个窗格执行一个进程,我就无法移动到另一个窗格来执行另一个作业。

我怎样才能克服这个问题?

我将发布代码示例。

#! /bin/bash
tmux split-window -v
tmux select-pane -t 0
./blocking_script_1
tmux select-pane -t 1 #doesnt happen
./blocking-script_2  #doesnt happen
Run Code Online (Sandbox Code Playgroud)

谢谢

利亚姆

linux terminal bash tmux

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

Groovy 语法不适用于反斜杠

我试图在常规语法中的以下命令中使用反斜杠:

find /path/folder-* -type f -iname "file*" -exec rm -f {} \;
Run Code Online (Sandbox Code Playgroud)

当我尝试在 Jenkins 管道上构建此命令时,会出现有关此语法的错误。甚至在我执行此命令之前,Jenkins 表单字段上就会出现红色语法警告,提示意外字符:“\”。

我可以做什么来替换或修复这个反斜杠的错误?

Groovy 命令:

node ("instance") {
    stage ("cleaning folders"){
        sh '''        
        find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \;
        '''
    }
    stage ("instance1"){
        sh '''
        rm -f /root/logfiles/instance1/*
        echo instance1; 
        scp 100.0.0.50:/var/log/file1.log /root/logfiles/instance1/file1.log;
        scp 100.0.0.50:/var/log/file2.log /root/logfiles/instance1/file2.log;
        '''
    }
    stage ("instance1"){
        sh '''
        rm -f /root/logfiles/instance2/*
        echo instance2; 
        scp 100.0.0.51:/var/log/file1.log /root/logfiles/instance2/file1.log;
        scp 100.0.0.51:/var/log/file2.log /root/logfiles/instance2/file2.log;
        '''
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:rm -f目前我对所有情况都有。将全部替换rm …

bash find bash-scripting groovy jenkins

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

在 bash 脚本中,括号表示法比反引号更好吗?

当我学习编写 bash 脚本时,我使用反引号将命令的输出放入变量中,例如

ALLPDFS=`find . -name \*.\[pP\]\[dD\]\[fF\]`
Run Code Online (Sandbox Code Playgroud)

但大多数“官方”脚本(在 Linux 软件包中下载的脚本)使用带有美元符号和括号的表示法:

ALLPDFS=$(find . -name \*.\[pP\]\[dD\]\[fF\])
Run Code Online (Sandbox Code Playgroud)

有充分的理由选择其中之一吗?我猜第二个更符合其他 bash 语法。虽然我尝试过计时

time for (( i=0; i<10; i++ )); do  a=`find . -name \*.\[pP\]\[dD\]\[fF\]`; done
time for (( i=0; i<10; i++ )); do a=$(find . -name \*.\[pP\]\[dD\]\[fF\]); done
Run Code Online (Sandbox Code Playgroud)

这没有任何区别。也许有一种更适合堆栈/堆使用吗?

linux bash command-line brackets

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

每次打开终端窗口时运行脚本

所以我编写了一个简单的 bash 脚本来在每次打开新的终端窗口时运行一个名为“cmatrix”的程序。

我已经更改了文件的权限,因此每个人都可以接收它,并验证它在调用时是否会按照我想要的方式运行,但现在我不知道将脚本放在哪里,以便它在每个新的 bash 上运行终端启动。我知道如果我希望它在启动时运行,我会将其放置在 usr/local/bin 中,但我只希望它在打开新的终端窗口时运行。

非常非常简单:

cmatrix -bs -C cyan
Run Code Online (Sandbox Code Playgroud)

感谢任何和所有的帮助!

谢谢

linux terminal bash linux-mint bash-scripting

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