输出结果来自正在运行的.sh脚本

时间:2012-12-23 20:21:03

标签: sh

如果我有一个包含以下脚本代码的基本.sh文件:

#!/bin/sh
rm -rf "MyFolder"

如何使此运行脚本文件向终端显示结果,以指示目录删除是否成功?

5 个答案:

答案 0 :(得分:1)

您并不需要说成功就可以了。您可以让它仅在错误say上说些什么,然后沉默就意味着成功✔。

这就是Unix哲学的工作原理:

沉默规则(也称为沉默是黄金规则)是 Unix哲学的重要组成部分,其中指出:当程序没有什么令人惊讶,有趣或有用的说法时,它什么也不要说。这意味着行为良好的程序应将其用户的注意力和注意力视为有价值的,并因此尽可能不引人注意地执行其任务。也就是说,沉默本身就是一种美德。 http://www.linfo.org/rule_of_silence.html

rm本身就是这种行为。

答案 1 :(得分:0)

如果您询问一般情况,如问题标题所示,您可以使用sh -x scriptname运行脚本以查看其正在执行的操作。将诊断输出写入脚本本身并通过选项控制它也很常见。

#!/bin/sh
verbose=false
case $1 in -v | --verbose )
    verbose=true
    shift ;;
esac

say () {
    $verbose || return
    echo "$0: $@" >&2
}

say "Removing $dir ..."
rm -rf "$dir" || say "Failed."

如果您运行此脚本时没有任何选项,它将以静默方式运行,就像一个表现良好的Unix实用程序应该。如果使用-v选项运行它,它将打印一些诊断到标准错误。

答案 2 :(得分:-1)

rm -rf "My Folder" && echo "Done" || echo "Error!"

您可以阅读有关创建一系列管道in bash manual

的更多信息

答案 3 :(得分:-1)

在bash(以及其他类似的shell)中,?环境变量为您提供上次执行的命令的退出代码。所以你可以这样做:

#!/bin/sh
rm -rf "My Folder"
echo $?

<强>更新

如果执行rm命令后该目录不存在(因为它已成功删除,或者因为执行该命令时它不存在),脚本将打印0.如果目录存在(这意味着该命令无法删除它)然后脚本将打印除0以外的退出代码。如果我正确理解了这个问题,这正是所请求的行为。如果不是,请纠正我。

答案 4 :(得分:-3)

之前的回答是错误的:rm不会退出并显示错误代码&gt;当目录不存在时为0。

相反,我建议使用:

dir='/path/to/dir'
if [[ -d $dir ]]; then
    rm -rf "$dir"
fi

如果您希望rm返回状态,请删除-f标记。

Linux Mint上的示例(目录不存在):

$ rm -rf /tmp/sdfghjklm
$ echo $?
0

$ rm -r /tmp/sdfghjklm
$ echo $?
1