标签: bash

从 shell 创建数千个文件

我有数千个目录,它们都有这种格式;

/var/www/vhosts/[USERNAME].company.com/conf/
Run Code Online (Sandbox Code Playgroud)

我有一个名为 x.txt 的文件,它的内容应该有

[USERNAME] and some static text...
Run Code Online (Sandbox Code Playgroud)

因此,当我执行 dir /var/www/vhosts/*/conf/ 时,我获得了需要将文件复制到其下的所有目录,但是,我不知道如何获取该 [USERNAME] 并将其放入我需要复制的那个文件。

欢迎所有建议。我只能在这个环境中使用 shell 脚本。

谢谢,

shell bash

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

Bash 脚本:将文件内容解析为数组

你好,

我正在编写一个简单的 bash 脚本,需要将文件的内容解析为数组。文件中的条目以“换行符”分隔——所以文件看起来像这样:

path/to/file
path/to/other/file
Run Code Online (Sandbox Code Playgroud)

我想解析内容并迭代它们。我的代码目前看起来像:

CONTENT=`cat /path/to/text/file.txt`
for PATH in $CONTENT
do
   echo $PATH
   chmod -R 440 $PATH
fi
Run Code Online (Sandbox Code Playgroud)

此代码适用于带有 UNIX 行结尾的文件。但是,对于 Windows 格式的文本文件,它会令人窒息。“echo $PATH”语句生成正确的路径,但 chmod 失败,表示该文件不存在。我的诀窍是 Windows 行尾没有被修剪,所以它试图修改一个包含换行符的文件路径。

无论目标文件是使用 Unix 还是 Windows 换行符创建的,我都需要使这件事起作用——但鉴于我对 shell 脚本有点陌生,我不太确定该怎么做。

我感谢您的帮助!

bash

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

是否可以在使用 sudo 调用的脚本中获取真实用户名?

我有一个用 sudo -- 调用的脚本,我sudo script希望能够看到运行该脚本的用户的用户名(不是 root)。

坚持whoamiid -un在脚本内只是给我root

bash

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

在 Bash 中,文件以“-”开头

一个应用程序在我的 /tmp 目录中创建了一个名为“-123456”的目录。

在 Bash 中,rm -rf * 返回:bash: cd: -7: invalid option

rm -rf "-123456" 同样的事情。

帮助?

bash

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

yum list installed 包括所有已安装软件包的版本 CentOS 5.4

我有一个在 CentOS 5.4 上用 yum 安装的软件包列表

[root@server ~]# yum list installed
...
Installed Packages
GConf2.x86_64             2.14.0-9.el5           installed
ImageMagick.x86_64        6.2.8.0-4.el5_1.1      installed
MAKEDEV.x86_64            3.23-1.2               installed
MySQL-python.x86_64       1.2.1-1                installed
Run Code Online (Sandbox Code Playgroud)

我想rpm使用本地下载这些

yumdownloader --resolve MySQL-python-1.2.1-1.x86_64 等等。

但是包格式不同(MySQL-python.x86_64 1.2.1-1vs MySQL-python-1.2.1-1.x86_64)所以我无法使用上面的命令下载它们。

我不想解析 的输出yum list installed,也不想使用 的内容,/var/log/yum.log*因为我必须考虑擦除的包和版本差异。但是/var/log/yum.log*确实有我需要的格式...

May 25 14:58:15 Installed: groff-1.18.1.1-11.1.x86_64
May 25 14:58:15 Installed: bzip2-1.0.3-4.el5_2.x86_64
Run Code Online (Sandbox Code Playgroud)

有什么建议?

configuration bash web-server centos yum

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

Shell 脚本和正则表达式:哪个更适合匹配数字,[[:digit:]] 或 [0-9]?

正如标题所暗示的,哪个更适合匹配数字,[[:digit:]]还是[0-9]

我正在使用 bash shell

谢谢 :)

bash unix-shell regular-expressions

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

linux 日志文件无法在 Windows 记事本中正确打开

我的红帽 linux 盒子上有一小段代码,比如

echo $ddate";"$time";"$cpu >> /home/logfile

输出在 vi

2010-04-10 12:23:32;01
2010-04-10 12:23:32;01
2010-04-10 12:23:32;01
Run Code Online (Sandbox Code Playgroud)

但是当我将它 ftp 到 Windows 机器并在记事本中打开它时

我懂了

2010-04-10 12:23:32;01 [] 2010-04-10 12:23:32;01 [] 2010-04-10 12:23:32;01
Run Code Online (Sandbox Code Playgroud)

它显示在一行中,如果我将其复制到 excel 中,则显示在不同的行中。

我的猜测是记事本无法理解换行符 []

有没有办法可以用不同的方式编写它,以便它可以在记事本中正确显示。

scripting linux bash

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

Unix将多个命令分开,最后有'&'(在后台执行)

在 Unix 中分隔常规命令是将分号放在最后,如下所示:

cd /path/to/file;./someExecutable;
Run Code Online (Sandbox Code Playgroud)

但它似乎不适用于这样的命令:

./myProgram1 > /dev/null &
./myProgram2 > /dev/null &
=>./myProgram1 > /dev/null &;./myProgram2 > /dev/null &;
Run Code Online (Sandbox Code Playgroud)

有没有办法将这些命令分开?

另外,如果我将粘贴复制到命令提示符,以下两种情况是否相同?谢谢。

cd /path/to/file;./someExecutable;

cd /path/to/file;
./someExecutable;
Run Code Online (Sandbox Code Playgroud)

linux unix shell bash shell-scripting

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

如何在 shell 脚本中对 rdesktop 密码参数进行编码?

我可以使用此脚本从 linux 连接到 windows RDP 会话:

#!/bin/bash
/usr/bin/rdesktop -N -x m -u Administrator -p secret123 -d DOMAIN1 127.0.0.1:33891
Run Code Online (Sandbox Code Playgroud)

(远程 Windows 服务器的 rdp 端口​​被安全地隧道连接到本地主机上的端口 33891)

但是这个脚本没有正确传输密码:

#!/bin/bash
/usr/bin/rdesktop -N -x m -u Administrator -p #secret$123# -d DOMAIN2 127.0.0.1:33892
Run Code Online (Sandbox Code Playgroud)

我必须如何对密码中的特殊字符进行编码?

我还想知道如果我选择 /bin/sh 作为脚本的 shell 是否会有所不同。

编辑:

我发现这有效:

\#秘密\$123\#

rdp shell bash unix-shell rdesktop

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

如何通过 shell 脚本以编程方式更改 php.ini 值?

基本上,我正在尝试设置一个 shell 脚本,让我在新服务器上自动配置一些参数

特别是,我想在 php.ini 中设置

error_log= /var/log/php_errors.log error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

在我的 bash 脚本中,我有这个:

ERROR_REPORTING="error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED"
ERROR_LOG="/var/log/php_errors.log"

#CREATE LOG FILE 
sed -i 's/error_reporting = .*/error_reporting = '${ERROR_REPORTING}'/' /etc/php.ini
touch $ERROR_LOG
chown apache:apache $ERROR_LOG
#The ; in the next line is because the line is commented by default on RHEL5
sed -i 's/;error_log = .*/error_log = '${ERROR_LOG}'/' /etc/php.ini
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用,并且错误对我来说并不明显……有人可以纠正我的错误吗?

bash rhel5

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