试图捕获和显示 curl 的输出让我发疯。我终于找到了一种解决方法,但我不明白为什么需要它。
这是一个失败的脚本:
#!/bin/bash
function echo_output() {
echo $@
}
CURL_OUTPUT=$(curl -sL --head www.google.com/foobar)
echo_output "$CURL_OUTPUT"
Run Code Online (Sandbox Code Playgroud)
这是一个有效的脚本:(转义回车)
#!/bin/bash
function echo_output() {
OUT="${@//[$'\r']/\r}"
echo $OUT
}
CURL_OUTPUT=$(curl -sL --head www.google.com/foobar)
echo_output "$CURL_OUTPUT"
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?换行符和“$@”有什么特别之处?谢谢您的帮助。
我正在一个使用很多这样的命令的平台上工作:
ssh login@server.com 'curl http://some_server/script.sh | bash'
这对于远程执行脚本来说非常干净和方便,但是,无论如何我都看不到获取脚本的输出/退出代码。任何人都可以找出一些方法来确保脚本已正确执行(从启动 ssh 的主机的角度来看)。
我正在运行带有加密主目录 (encryptfs) 的 Ubuntu 13.04 服务器。我保持一个 tmux 会话处于打开状态,其中包含我的开发环境(vim 等)。当我断开连接时,我将断开 tmux 会话,然后断开 ssh 连接。稍后,当我重新连接并重新附加 tmux 会话时,我会收到如下错误:
fatal: Could not change back to '(unreachable)/*****': No such file or directory
Run Code Online (Sandbox Code Playgroud)
这通常意味着 vim(在分离时仍然打开)保存到错误的位置,并且实际上不会将文件写入磁盘,只会写入“无法访问”目录,这似乎是临时的。
如果我从 bash运行 ' pwd '(重新连接后没有做任何其他事情),我会得到正确的目录/home/***/***。如果我运行 'git status',我会得到上面的消息(没有这样的文件),如果我在 vim 中运行' :pwd ',我会得到“ (unreachable)/*** ”。
对此的临时解决方法是运行 ' cd 。' 在运行任何其他命令之前,它允许 git/vim/etc 实际查看目录。这很不方便,因为我经常在 tmux 中打开许多面板/屏幕,我必须运行 ' cd 。' 每次我重新连接时。最重要的是,我必须确保在断开连接之前关闭 vim 或其他任何东西,否则如果我不小心,我可能会丢失数据。
我在某处看到另一个线程,将此归因于 encryptfs在注销时卸载$HOME,但没有回复。这似乎是一个可能的原因,但我不知道从哪里开始。有什么帮助吗?
朋友们,
我在 Linux 上使用 GNU bash 作为我的 shell:
$ bash --version
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$
Run Code Online (Sandbox Code Playgroud)
当我设置一个以 FS 路径作为其值的环境变量时,它的行为非常奇怪。
假设我想将 /opt/database/bin 添加到 PATH 的前面。
我首先输入:
$ export PATH=/o
Run Code Online (Sandbox Code Playgroud)
然后我按下键盘上的 Tab 键。
但是它没有完成 /opt 的路径,而是删除了 PATH= 部分!相反,我得到:
$ export /opt/
Run Code Online (Sandbox Code Playgroud)
当然,那对我来说非常无用,而且非常恼人!然后我需要手动添加环境变量名称,这根本不是我想要做的!
我希望它完成它: …
我有一个脚本可以做一些内务处理,当从交互式 shell 调用时它运行良好,但在被 cron 调用时什么也没做。为了解决这个问题,我使用以下命令启动了一个带有“空白”环境的 shell:
env -i /bin/bash --noprofile --norc
Run Code Online (Sandbox Code Playgroud)
使用这个空白环境,我已经深入到我的脚本中,发现以下内容grep与任何文件都不匹配:
grep -il "^ws_status\s*=\s*[\"']remove[\"']$"
Run Code Online (Sandbox Code Playgroud)
但是,当从交互式 shell 运行时,该命令将返回匹配文件的文件名。
请注意,该表达式匹配如下行: WS_STATUS = "remove"
通过反复试验,我发现将-P选项添加到 [Perl regex] 中,命令开始在“空白”shell 中正常工作。但是,我不知道为什么我的登录 shell 似乎默认为grep -P.
grep二进制,/bin/grepgrep=pgrep或定义别名grep="grep -P"GREP_OPTIONS定义环境变量。这里有什么交易?
注:操作系统为 RHEL v5.10,Bash 为 v3.2.25,grep 为 v2.5.1
我需要从SCP的文件machineB,并machineC到machineA。我正在从machineA. 我已经正确设置了 ssh 密钥。
如果文件不存在的machineB,那么它应该是那里machineC。我需要将所有 PARTITION1 和 PARTITION2 文件移动到 machineA 各自的文件夹中,如下所示在我的 shell 脚本中 -
#!/bin/bash
readonly PRIMARY=/export/home/david/dist/primary
readonly SECONDARY=/export/home/david/dist/secondary
readonly FILERS_LOCATION=(machineB machineC)
readonly MAPPED_LOCATION=/bat/data/snapshot
PARTITION1=(0 3 5 7 9)
PARTITION2=(1 2 4 6 8)
dir1=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[0]} ls -dt1 "$MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | head -n1)
dir2=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[1]} ls -dt1 "$MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | head -n1)
length1=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[0]} "ls '$dir1' | wc -l")
length2=$(ssh -o …Run Code Online (Sandbox Code Playgroud) 我试图限制一个简单的 iperf 服务器和客户端之间的带宽,使用第三台被动机器作为桥梁。在没有干扰的情况下,iperf 返回约 90 Mbits/sec 的带宽。我的目标是创建一个根 qdisc,将所有未分类的流量(所有内容)发送到子 HTB 类,在那里设置我的带宽,然后路由到叶 qdisc,一旦我开始工作,将在其中设置额外的 tc 参数。我的实现很简短:
sudo tc qdisc add dev $interface root handle 1: htb default 10
sudo tc class add dev $interface parent 1:0 classid 1:10 htb rate $bandwidth burst $burst
sudo tc qdisc add dev $interface parent 1:10 handle 10:0 netem #other stuff goes here
Run Code Online (Sandbox Code Playgroud)
当这个 bash 脚本在带有$interface = eth1, $bandwidth = 500kbps,的网桥上实现时$burst = 15k,我看到 iperf 带宽有所减少,但还没有接近规定值(通常约为 5Mbps)。
我的脚本中有错误吗?我是否滥用了突发变量?请帮忙。
更新:经过进一步调查,我发现这种流量控制在应用于与 SERVER 接口的以太网卡时工作正常,但是当将相同的命令应用于 CLIENT 端时会出现问题。当整个设置颠倒时也是如此。
出于某种原因,我的 cron 作业脚本没有完全退出,它们正在备份我的服务器。目前有几百个进程在为我的一个用户运行。我可以使用以下命令杀死该用户的所有进程,但是如何简化它以仅杀死 cron?
pgrep -U username | while read id ; do kill -6 $id ; done
Run Code Online (Sandbox Code Playgroud)
按原样运行上述命令会很危险,对吗?这不会杀死 mysql 和其他重要的东西吗?
我有两个 CentOS 5.10 boxen,已升级bash到最新版本。但是,在其中一个框中,bash仍然容易受到攻击CVE-2014-7169(我正在使用此 ServerFault answer 中的测试)。
关于为什么一台机器可以而另一台机器不行的任何想法?我可以检查什么?
我已经检查过的:
1- 确保两台机器都运行相同的操作系统(两台机器的输出相同):
# cat /etc/redhat-release
CentOS release 5.10 (Final)
Run Code Online (Sandbox Code Playgroud)
2- 确保我有相同的版本bash(两者输出相同):
# rpm -qi bash
Name : bash Relocations: (not relocatable)
Version : 3.2 Vendor: CentOS
Release : 33.el5_10.4 Build Date: Thu 25 Sep 2014 08:58:19 PM UTC
Install Date: Sat 27 Sep 2014 02:07:07 PM UTC Build Host: sclbuild-c5.centos.org
Group : System Environment/Shells Source RPM: bash-3.2-33.el5_10.4.src.rpm
Size : 5235475 License: …Run Code Online (Sandbox Code Playgroud) 我将此发布给超级用户,但没有人接受:https : //superuser.com/questions/832578/how-to-grep-a-continuous-stream-with-paging
我想获取一个日志文件并过滤掉一些不相关的日志条目,例如 INFO 级别的日志条目。上面的 Stack Overflow 答案让我受益匪浅:
$ tail -f php_error_log | grep -v INFO
Run Code Online (Sandbox Code Playgroud)
我想要的下一部分是在此流中进行分页,例如使用 less。less +F 适用于连续流,但我不能将其应用于 grep。我怎样才能做到这一点?
自从发布该问题以来,我一直在研究它并发现它less正在等待 EOF 出现,并挂起直到它收到它(来源)。这解释了为什么尝试跟随管道不起作用。我编写了一个简短的脚本来做我想做的事,不优雅:
#!/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
Run Code Online (Sandbox Code Playgroud)
我相信可以更优雅地做到这一点,也许使用一个无需直接交互即可自动清理的临时文件。