Articles of bash

/ bin / sh:variables和直接命令的区别

想象一下,我有以下bash脚本: #/bin/sh #next line will work correctly, outputting user name and current directory start-stop-daemon –start –exec /bin/su — root -c 'whoami; ls' MYVAR="start-stop-daemon –start –exec /bin/su — root -c 'whoami; ls'" #next line will fail with following error: #ls': -c: line 0: unexpected EOF while looking for matching `'' $MYVAR 问题 – 为什么第二种方法通过variables不起作用? 如何使其工作?

Systemd退出执行导致失败的命令的bash脚本,而不是继续

我试图得到一个脚本,推动我的系统login到CoreOS的logentries。 为了弥补这个事实,实例在AWS上分拆时没有互联网连接,我把这个命令放在了一个while循环中。 从命令行运行脚本while循环工作得很好。 但是,当systemd运行它的脚本时,它会立即退出netcat超时,所以它永远不会再有机会尝试。 有没有办法让systemd对退出脚本不那么积极? 系统输出,永远不会去“睡眠netcat” Jul 23 22:26:21 core-01 systemd[1]: Starting Push journal logs to logentries.com… Jul 23 22:26:21 core-01 systemd[1]: Started Push journal logs to logentries.com. Jul 23 22:26:21 core-01 bash[880]: trying netcat Jul 23 22:26:31 core-01 bash[880]: Ncat: Connection timed out. journal2logentries.sh #!/usr/bin/env bash token=logentriestoken while true do echo 'trying netcat' journalctl […]

如何在Linux控制台上查看两个对话框,同时运行?

我想同时在Linux控制台上查看两个对话窗口。 我想要一个查看进度BAR的窗口,查看日志的第二个tailbox正在运行。 问题是对话框总是出现在控制台的中心。 我想要的是 在控制台上同时查看两个对话框, 而进度条在屏幕的顶部, 这个盒子应该放在屏幕上。 如何实现这个? 如何将对话窗口向上或向下放置,而不是在中央? dialog –title "RUN TASKS FROM TEXT TABLE" –gauge "Please wait…" 10 70 0 dialog –tailbox file.log 10 100

在没有可执行位的情况下安装bash后locking

在将shellshock补丁的bash二进制文件scp到openSUSE 12.2 Linux虚拟机上,并用它replaceloginshell后,没有用户可以通过ssh或控制台login。 事实certificate,即使使用-p开关,传输过程中的可执行位也会丢失。 我试图通过在Linux Xen主机上挂载文件系统并执行chmod +x /mnt/usr/local/bin/bash来修复此问题,但情况并未改善。 将重新启动来宾VM帮助? 这是我在控制台上看到的: xxx login: root Password: Last login: xxx Have a lot of fun… — root: no shell: permission denied 这出现在/mnt/var/log/messages … 在sshlogin: sshd: User root not allowed because shell /bin/bash is not executable sshd: input_userauth_request: invalid user root [preauth] sshd: Postponed keyboard-interactive for invalid user root […]

如何通过分页来连续的stream

我发布这个超级用户,但没有采取: https : //superuser.com/questions/832578/how-to-grep-a-continuous-stream-with-paging 我想要一个日志文件,并过滤掉一些不相关的日志条目,比如INFO级别的日志条目。 上面的堆栈溢出的答案让我的一部分的方式: $ tail -f php_error_log | grep -v INFO 我想要的下一个部分是在这个stream中分页,比如less。 lessF +连续stream的作品,但我不能应用于grep。 我怎样才能做到这一点? 自从发布了这个问题后,我发现, less等待EOF出现,并挂起,直到它收到( 源 )。 这解释了为什么试图跟随pipe道不工作。 我剽窃了一个简短的脚本,不经意地做我想做的事情: #!/bin/bash tail -f /data/tmp/test.txt | grep –line-buffered foo > /data/tmp/foo & pid=$! echo $pid sleep 1 less +F /data/tmp/foo kill $pid rm /data/tmp/foo 我相信有可能更优雅地做到这一点,也许与临时文件,自动清理没有直接的互动。

Linux:如果找不到与我使用的模式匹配的文件,我如何从find命令获得不同的退出代码?

我有一个脚本运行下一个命令: find /storage2/hpfiles_staging/ -name \*.gz -mmin +600 然后rsync的文件到远程位置。 有时find命令不会返回任何输出(因为在那个位置没有10分钟或更长时间的文件名为* .gz)。 当它发生时,我想写一条消息给日志,说有没有文件。 但是当我运行find命令时,是否发现要传输的文件find命令的退出代码总是为0(除非当然有语法错误),因此不能告诉我在那个位置find的文件或不。 如果find命令没有find文件,是否有任何开关或窍门可以获得不同于0的退出代码? 提前致谢

脚本文件中意外的文件错误结束

#!/bin/sh # Host = ############### Port = #### email_id="##################" email_sub="######" # if ping -q -c 5 $Host >/dev/null then result_host="Successful" else result_host="Not Successful" fi result_nc='nc -z $Host $Port; echo $?' if [ $result_nc != 0 ]; then result_port="Not Opened" else result_port="Opened" fi mesg="Ping to host was ${result_host}, Port $port is ${result_port}." echo "$mesg" #echo "$mesg" […]

用variables中的参数查找命令

> find /etc -name 'shells' /etc/shells # good !! > SEARCH="-name 'shells'"; find /etc $SEARCH # nothing found – bad !! 为什么“查找”命令不能带参数variables? 其他命令在这种模式下工作正常。 这可能与空格和parsing有关。 我怎样才能在variables中构造params,然后用这个参数执行“find”? 为了清楚起见,我想制作一个名为xxxx -o -name -yyyyy -o -namezzzzz的链,然后通过一次运行find所有的文件

这个variables如何在systemd单元文件中转义工作?

我有一个相当简单的单元文件,用于在CoreOS上运行的服务器实例的发现sidekick服务。 单位文件如下所示: [Unit] Description=Discovery for frontend server (instance %i) BindsTo=frontend@%i.service After=frontend@%i.service [Service] EnvironmentFile=/etc/environment ExecStart=/usr/bin/bash -c ' \ while true; do \ export PORT=$(docker port frontend%i 80 | sed s/.*://); \ etcdctl set /services/frontend/%i "${COREOS_PRIVATE_IPV4}:$PORT" –ttl 60; \ sleep 45; \ done' ExecStop=/usr/bin/etcdctl rm /services/frontend/%i [X-Fleet] MachineOf=frontend@%i.service 这工作正常,但花了很多时间才能到达这个阶段,因为如果我将etcdctl行更改为: etcdctl set /services/frontend/%i "${COREOS_PRIVATE_IPV4}:${PORT}" –ttl 60; \ 然后它不起作用 […]

如何从sudo用户检查根环境variables?

我如何可以从sudo用户检查根环境variables? 我尝试了su和sudo的各种键和组合,但没有运气。 例如,普通用户的$ HISTFILESIZE = 2000和root用户的9999。 vagrant@default-debian-78-64-nocm:~$ echo $HISTFILESIZE 2000 vagrant@default-debian-78-64-nocm:~$ sudo -i root@default-debian-78-64-nocm:~# echo $HISTFILESIZE 9999 但是当我尝试通过sudo获得root $ HISTFILESIZE时,它总是返回2000: vagrant@default-debian-78-64-nocm:~$ sudo -i echo $HISTFILESIZE 2000 vagrant@default-debian-78-64-nocm:~$ sudo -i su – -c "echo $HISTFILESIZE" 2000 vagrant@default-debian-78-64-nocm:~$ sudo -i bash -c "echo $HISTFILESIZE" 2000 vagrant@default-debian-78-64-nocm:~$ sudo -i bash -l -c "echo $HISTFILESIZE" 2000