允许sh从任何地方运行

时间:2017-09-25 00:29:47

标签: linux sh

我一直在使用ioping监控Linux服务器的性能(去年性能有所下降)。为此我创建了一个简单的脚本:

echo $(date) | tee -a ../sb-output.log | tee -a ../iotest.txt
./ioping -c 10 . 2>&1 | tee -a ../sb-output.log | grep "requests completed in\|ioping" | grep -v "ioping statistics" | sed "s/^/IOPing I\/O\: /" | tee -a ../iotest.txt
./ioping -RD . 2>&1 | tee -a ../sb-output.log | grep "requests completed in\|ioping" | grep -v "ioping statistics" | sed "s/^/IOPing seek rate\: /" | tee -a ../iotest.txt
etc

脚本在文件夹/home/bench/ioping-0.6中调用ioping。然后它将输出以可读的形式保存在/home/bench/iotest.txt中。它还添加了日期,以便我可以比较时间点。

不幸的是,我没有经验丰富的程序员,只有当你第一次进入正确的目录(/home/bench/ioping-0.6)时,这个版本的脚本才有效。

我想从任何地方调用此脚本。例如,通过调用

sh /home/bench/ioping.sh

谷歌搜索并阅读路径变量有点过头了。

不同版本的最终版本
  

第3行:./ioping:没有这样的文件或目录

有关如何升级脚本以使其在任何地方都可以使用的任何想法吗?

2 个答案:

答案 0 :(得分:0)

不是很明显吗? ioping不在.,因此您无法使用./ioping

最简单的解决方案是将PATH设置为包含ioping所在的目录。可能更健壮 - 找出$0的路径,并将该路径用作ioping的位置(确保您的脚本位于ioping旁边)。

如果iopinf本身依赖于在某个目录中的破坏,你可能必须在运行之前使你的脚本cd到ioping目录。

答案 1 :(得分:0)

技巧是shell的$0变量。这被设置为脚本的路径。

#!/bin/sh

set -x
cd $(dirname $0)
pwd

cd ${0%/*}
pwd

如果dirname由于某些原因而无法使用,例如一些有限的busybox发行版,您可以尝试使用shell参数扩展技巧,例如我的示例中的第二个。