标签: bash

采购文件

我有一个系统范围的软件安装。源位于 /opt/Software 。该软件的 bashrc 文件需要为每个使用它的用户提供。是否会添加


source $PATH_TO_SOFTWARE_BASHRC
Run Code Online (Sandbox Code Playgroud)他们的 ~/.bashrc 为所有用户工作?我应该如何在 $PATH_TO_SOFTWARE_BASHRC 处设置文件的权限,以便所有用户都可以访问该软件?

linux bash source

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

如何在不使用 $ 的情况下在 bash 中分配变量?

有没有更简单/更优雅的方法来为变量分配返回值?到目前为止,我一直在做类似的事情:

some_command_to_run
VAR_TO_SET=$?
Run Code Online (Sandbox Code Playgroud)

但我更愿意将所有内容都放在一行上,最好不使用 $? 多变的。有谁知道怎么做?

bash

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

比较 bash 中的两个用户列表

我有两个不同的用户列表。我需要比较用户并确保它们存在于两个文件中。一个是 passwd 文件,另一个是包含用户名和其他信息的平面文件,我可以从中提取排序的用户名列表。

这给了我一个排序的用户名列表:

cat /etc/passwd | cut --fields=1 | sort -k1.2
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,第二点我如何将它与另一个文件中的另一个用户列表进行比较?如果用户不存在,我会将其添加到平面文件中。

linux bash passwd

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

正则表达式负匹配问题

我一直很沮丧试图提出一个正则表达式来匹配基于特定文件名的字符串,我希望有一个正则表达式忍者(为了时间,我将省略强制性的 xkcd 链接)可以提供帮助。

我需要匹配任何以“.htm”或“.html”结尾的字符串,这些字符串不是(负匹配)紧跟在“msg-”之后的 4-16 位数字或连字符。字符串的开头可以是任何长度或内容。

到目前为止,这是我的尝试:

(?!msg-[0-9-]{4,16})\.html?$
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用。问题的一部分是先行匹配——如果整个字符串满足这些条件,我想匹配整个字符串,而不是不匹配的字符串的第一部分。任何建议,将不胜感激。

如果它对口味很重要,这将进入 Debian 上的 bash 脚本。

编辑:

以下是一些应该与正则表达式匹配的字符串

the-quick-brown-fox-jumped-over-the-lazy-dog.html  # ends with .html but no digits/hyphens just prior
wdihwi94uq239ujdf23yefh02msg-2-8.htm   # digit/hyphen count between 'msg-' and '.html' is below 4
ohdf23890yo4c89uwmsg-999-24j345.html   # non-number/hyphen in chars between 'msg-' and '.html'
Run Code Online (Sandbox Code Playgroud)

以下是一些不应与正则表达式匹配的字符串:

kh3j42he2-dwfascn233=feufefask0msg-34535-355  # does not end with '.htm'/'.html'
395-u78{efihighqwioh9msg-8455-212.html  # ends with 'msg-' then 4-16 of [0-9-] then '.html'
dfhjwih9asnm)qpzmx.wod923klsj39msg-00-0000.htm
Run Code Online (Sandbox Code Playgroud)

bash regex

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

用于遍历文本文件并删除字符串的 shell 脚本

我在一个目录中有几百个文本文件,其中包含用户列表:

&usera
&userb
userc
&userd
Run Code Online (Sandbox Code Playgroud)

请注意,有些不带&. 此外,在某些文件中,最后一行不以换行符结尾。

在 shell 脚本中遍历所有这些文件并删除,例如userb确保每个现有用户保留在自己的行上的最简单方法是什么?

谢谢!

scripting shell bash sed

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

路径中的 sudo 问题

使用:

Linux nomemory 2.6.32-24-generic #43-Ubuntu SMP Thu Sep 16 14:17:33 UTC 2010 i686 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

我在我的文件夹$HOME名为~/.scriptfarm/scripts那里我继续我的一些自定义脚本。

nomemory@nomemory:~$ ls -l /home/nomemory/.scriptfarm/script
total 20
-rwxr-xr-x 1 nomemory nomemory 10 2010-09-21 01:31 aaa
-rwxr-xr-x 1 nomemory nomemory 31 2010-09-21 00:47 pt.chc
-rwxr-xr-x 1 nomemory nomemory 35 2010-09-21 00:47 pt.int
-rwxr-xr-x 1 nomemory nomemory 34 2010-09-21 00:47 pt.rem
-rwxr-xr-x 1 nomemory nomemory 54 2010-09-21 00:47 pt.up
Run Code Online (Sandbox Code Playgroud)

问题是在 Ubuntu 中,当前缀为sudo. 在脚本运行的 Arch 上,行为是不同的。

让我给你举个例子(aaa是一个 foobar 类型的脚本):

nomemory@nomemory:~$ aaa …
Run Code Online (Sandbox Code Playgroud)

ubuntu bash path arch-linux

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

如何在 bash 中以更简洁的方式连接环境变量路径?

为了修改我的路径(如 LD_LIBRARY_PATH 或 PYTHONPATH),我首先检查变量是否存在。如果是这样,我旧值与新值连接起来(用分号分隔),否则我将变量设置为新值。

NEW_PATH='/path/to/new/path'  
if [ $LD_LIBRARY_PATH ]  
then  
    export LD_LIBRARY_PATH=$NEW_PATH:$LD_LIBRARY_PATH  
else  
    export LD_LIBRARY_PATH=$NEW_PATH  
fi  
Run Code Online (Sandbox Code Playgroud)

它有效,但是当你在脚本中有很多这些源代码时它有点笨拙:是否有一个聪明的技巧可以使这个块成为一个很好的单衬?

谢谢 !

shell bash path unix-shell

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

希望用户在 bash 脚本退出时从 shell 注销

我希望,当 linux 用户从 shell 脚本退出时,它也会从 bash shell 中注销。这可能吗?

linux bash shell-scripting

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

教以前只使用 Windows bash 的初学者?

我应该向初学者介绍如何使用 shell(即 bash)。我可以在 1 1/2 小时内教给某人而不要求太多的最基本/最有用的东西是什么?

以下是我想到的几点:

  • 我在哪里(密码)
  • 更改目录(cd、cd ..、cd -)
  • 创建目录(mkdir、mkdir -p)
  • 重命名文件/目录 (mv)
  • 复制文件/目录(cp,cp -r)
  • 列出目录条目(ls、ls -l、ls -a)

编辑

我所说的全部初学者是指 Unix/Linux 的全部初学者 :-)。

linux unix shell bash

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

tail -f 然后退出匹配的字符串

我正在尝试配置一个启动脚本,该脚本将启动 tomcat,监视 catalina.out 中的字符串“服务器启动”,然后运行另一个进程。我一直在尝试 tail -f 与 grep 和 awk 的各种组合,但还没有任何工作。我遇到的主要问题似乎是在 grep 或 awk 匹配字符串后强制尾部死亡。

我已简化为以下测试用例。

test.sh is listed below:

#!/bin/sh    
rm -f child.out
./child.sh > child.out &
tail -f child.out | grep -q B

child.sh is listed below:

#!/bin/sh
echo A
sleep 20
echo B
echo C
sleep 40
echo D
Run Code Online (Sandbox Code Playgroud)

我看到的行为是 grep 在 20 秒后退出,但是尾部将需要另外 40 秒才能死亡。我理解为什么会发生这种情况 - tail 只会在写入管道时注意到管道消失了,这仅在数据附加到文件时发生。由于 tail 将缓冲数据并将 B 和 C 字符作为单个写入输出(我通过 strace 确认了这一点)这一事实使情况更加复杂。我试图用我在其他地方找到的解决方案来解决这个问题,例如使用 unbuffer 命令,但这没有帮助。

有人对如何按照我的预期进行工作有任何想法吗?或者等待Tomcat成功启动的想法(考虑等待TCP端口知道它已经启动,但怀疑这会变得比我现在想要做的更复杂)。我已经设法让它与 awk 一起工作,在比赛中做一个“killall tail”,但我对这个解决方案不满意。注意我试图让它在 RHEL4 上工作。

automation tomcat bash grep tail

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