Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。

2
在systemd脚本中为true时运行
我得到了一个bash脚本,基本上运行了这个脚本: #!/bin/bash [...] while true; do str="broadcast "`randArrayElement "messages[@]"` server_send_message $str sleep $interval done 现在,我要将其作为systemd服务运行,我的服务脚本如下所示: [Unit] Description=Announcer After=network.target [Service] ExecStart=/usr/local/bin/somescript &; disown ExecStop=/usr/bin/kill -9 `cat /tmp/somescript.pid` Type=forking PIDFile=/tmp/somescript.pid [Install] WantedBy=default.target 不幸的是,当我通过service somescript start它运行该服务时,但是由于while true循环,我的终端无法启动脚本: ● somescript.service - somescript service Loaded: loaded (/etc/systemd/system/somescript.service; disabled; vendor preset: enabled) Active: activating (start) since …

2
阅读bash中的特殊键
我正在使用一个脚本,其中列出了一个选择列表。如:1)项目1 #(突出显示) 2)项目2 3)项目3#(已选中) 4)项目4 当用户按下down-arrow下一个项目时,突出显示 当用户按下up-arrow以前的项目时,突出显示 等等 当用户按下tab项目被选择时 当用户按下时,shift+tab所有项目都被选择/取消选择 当用户按下ctrl+a所有项目时 ... 从目前的使用情况来看,这工作正常,这是我的个人使用,其中输入由我自己的设置过滤。 问题是如何使各种终端之间的可靠性。 我使用一种有点黑的解决方案来读取输入: while read -rsn1 k # Read one key (first byte in key press) do case "$k" in [[:graph:]]) # Normal input handling ;; $'\x09') # TAB # Routine for selecting current item ;; $'\x7f') # …
8 bash  keyboard 

2
bash将通配符扩展与大括号扩展相结合
我正在尝试扩展一个字符串,该字符串涉及通配符和括号内指定的扩展名集合。如以下示例所示,似乎没有任何效果。变量firstList扩大罚款,但没有secondList,thirdList还是fourthList扩展正确。我也尝试过各种版本,eval但都没有用。任何帮助,将不胜感激 #!/bin/bash touch a.ext1 touch b.ext1 firstList='*.ext1' ls $firstList touch a.ext2 touch b.ext2 secondList='*.{ext1,ext2}' ls $secondList ls '$secondList' ls "$secondList" thirdList=*.{ext1,ext2} ls $thirdList ls '$thirdList' ls "$thirdList" fourthList="*.{ext1,ext2}" ls $fourthList ls '$fourthList' ls "$fourthList"

5
是否有工具可根据要求将输出动态重定向到新文件
我目前正在将监视工具的输出重定向到文件,但是,我想做的是根据我的请求(使用键绑定)将该输出重定向到新文件,而无需停止所说的工具。 就像是 monitor_program | handle_stdout 在哪里handle_stdout,我可以定义一个新文件,将日志放在特定位置。 我知道我可以轻松编写它,但是我想知道是否已经有工具允许这样做。

1
标准子Shell与命令替换子Shell
请解释以下陷阱输出: $ line(){ echo -------------; echo $BASHPID; } $ trap 'echo bye' EXIT; trap -p; line; (trap -p; line); echo "$(trap -p; line)" trap -- 'echo bye' EXIT trap -- '' SIGTSTP trap -- '' SIGTTIN trap -- '' SIGTTOU ------------- 6176 trap -- '' SIGTSTP trap -- '' SIGTTIN …
8 bash  trap 

3
通过就地编辑进行Sed更改文件的组所有权
我有shell(php)脚本,可以通过这种方式与目标文件联系: 检查文件和目录是否可写与php的is_writable()(我不认为这是问题) 使用以下sed命令进行就地文件编辑: grep -q "$search" "$passwd_file" && { sed -i "s|$search|$replace|" "$passwd_file"; printf "Password changed!\n"; } || printf "Password not changed!\n" 因此,我得到这是(一切正确的,但)文件myuser:www-data是myuser:myuser。 是否可以sed更改文件组的所有权?如果可能,如何避免更改?


1
改善我的Bash脚本
我需要改进我的Bash脚本,以使其完美运行而不会出现问题。该脚本ds4drv在其中使用,并且我不确定如何更正某些问题。 第一个问题是,在检测到控制器时它并不总是运行或正常工作,我已经为其创建了udev规则,但尚不清楚为什么在检测到该控制器时并不总是运行该脚本。 第二个问题,ds4drv只能被允许以root用户身份运行,而不能以普通用户身份运行。 第三个问题,创建PID锁定文件后,我不知道如何处理它们,因此,当PID进程不再存在时,它将在之后删除PID锁定文件。很难找到有关如何在bash脚本中使用PID文件的适当文档,因此只能有1个正在运行的实例。 这是我对ds4drv的udev规则: 50-ds4drv.rules KERNEL=="uinput", GROUP="users", MODE="0666" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05c4", GROUP="users", MODE="0 666" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", KERNELS=="0005:054C:05C4.*", GROUP="users" MODE="0666" ACTION=="add", SUBSYSTEM="usb", ATTRS{idProduct}=="054c", RUN+="/home/user/scripts/ds4check.sh", GROUP="users" , MODE="0666" 我很确定这是udev规则的样子,权限对我来说似乎是正确的,因为它对GROUP用户是读写的。似乎确实存在一些问题的实例,一旦我的bash脚本运行并且此规则设置为在连接控制器设备时自动运行,那么某些游戏将变得无响应,例如在没有控制器设备的情况下就连接了它。采取行动,/dev/js0而是采取行动/dev/js1。特别是如果它不是以root身份执行的,通常会返回此错误。 OSError: [Errno 13] Permission denied: '/dev/input/event17' 当然还有bash脚本; ds4check.sh #!/bin/bash # DS4 Check Script pidfile=/tmp/ds4drv.pid # check if process is already running …

3
从函数内部执行邮件命令会导致“叉子炸弹”
当我尝试mail从bash脚本中的函数内部执行时,它会创建类似于fork炸弹的内容。为了澄清,这会引起问题: #!/bin/bash mail() { echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "example@example.org" } mail exit 0 有时您只需要杀死该命令,它就会杀死子进程,但是有时您必须这样做killall -9。 不管邮件是否已发送。该叉炸弹创建两种方式。而且似乎没有为退出代码添加任何检查,例如if ! [ "$?" = 0 ]帮助。 但是以下脚本可以按预期工作,要么输出错误,要么发送邮件。 #!/bin/bash echo "Free of oxens" | mail -s "Do you want to play chicken with …

1
bash:此shell中无作业控制
我有一个最小的Linux系统。 init是/bin/bash,仅库中的最少数量/lib/,/dev/静态填充,没有运行的守护进程(无udev的,..) 当bash开始时,出现以下错误: bash: cannot set terminal process group (-1) inappropriate ioctl for device bash: no job control in this shell 当我使用strace启动bash时,得到以下输出: rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address) ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 …
8 bash  terminal  tty  ioctl 

4
比较两个URL列表并将新添加的URL打印到新文件中
最初,我将生成两个包含URL列表的文件-我将它们称为old和new。我想比较两个文件,如果文件中有任何URL,但这些URL new不在old文件中,我希望将这些URL 显示在extra_urls文件中。 现在,我已经阅读了一些有关使用diff命令的内容,但是据我所知,这也分析了信息的顺序。我不希望订单对输出有任何影响。我只是希望将多余的URL new打印到extra_urls文件中,无论它们在其他两个文件中的放置顺序如何。 我怎样才能做到这一点?

2
使用空格删除多个文件中的某些字符
我正在尝试重命名目录中的一堆音乐曲目,但出现此错误: 移动多个文件时,最后一个参数必须是目录 这是脚本: for file in * ; do mv $file $(echo $file |sed 's/^.\{5\}//g') done 这适用于没有空格的文件,我将如何修改此脚本?
8 linux  bash  scripting  sed 

3
有没有办法在脚本中即时获取加密的(GPG)文件?
我需要一个bash脚本来获取加密的文件,因为要获取的文件包含敏感信息。 我希望脚本提示输入GPG密码,然后运行,以获取加密文件。我虽然不知道该怎么做。密码必须有用户输入,因为我不想将带有加密文件的密钥存储在服务器上。 考虑一些不同的方法,我不想解密文件,获取未加密的文件,然后再将其删除。如果脚本出现问题,我想减少留下未加密文件的机会。 有没有一种方法可以获取文件的GPG输出以这种方式获取源代码?可能收集STDOUT并进行解析(如果GPG甚至可以这种方式输出内容)。 另外,如果还有其他方法可以加密Shell脚本可以使用的文件,我也不知道,但是有其他可能。


2
如何防止在sudo中使用调用方的shell
我在CentOS 6.5上运行sudo-1.8.6。我的问题很简单:如何防止SHELL从用户环境传播到sudo环境? 通常人们会选择另一种方式-他们想要保留环境变量。但是,我的用户“ zabbix”的shell /sbin/nologin尝试通过sudo运行命令时遇到问题。Sudo保留,/sbin/nologin以便root无法运行子shell。(更新:这部分是正确的,但不是SHELL环境变量。这是从/ etc / passwd中提取的shell值。) 我提供了一个可以说明问题的测试;这不是我的实际用例,而只是说明保留了调用用户的SHELL。我有一个以用户身份运行的程序zabbix。它调用/usr/bin/sudo -u root /tmp/doit(程序作为zabbix守护程序运行,因此/sbin/nologin密码文件中的shell不会阻止它运行)。/tmp/doit是一个shell脚本,仅具有: #!/bin/sh env > /tmp/outfile (模式显然是755)。在outfile我可以看到的SHELL是/sbin/nologin。但是,此时脚本通过sudo以root身份运行,因此它不应该具有先前用户的环境变量,对吗? 这是我的/ etc / sudoers: 默认要求 默认值!visiblepw 默认为always_set_home 默认值env_reset 默认值env_keep =“颜色显示主机名历史记录输入INPUTRC KDEDIR LS_COLORS” 默认值env_keep + =“邮件PS1 PS2 QTDIR用户名LANG LC_ADDRESS LC_CTYPE” 默认值env_keep + =“ LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES” 默认值env_keep + =“ LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.