输出结果来自正在运行的.sh脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输出结果来自正在运行的.sh脚本相关的知识,希望对你有一定的参考价值。
如果我有一个包含以下脚本代码的基本.sh文件:
#!/bin/sh
rm -rf "MyFolder"
如何使此运行脚本文件向终端显示结果,以指示目录删除是否成功?
答案
如果您询问一般情况,如问题标题所示,您可以使用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
选项运行它,它将打印一些诊断到标准错误。
另一答案
rm -rf "My Folder" && echo "Done" || echo "Error!"
您可以阅读有关创建一系列管道in bash manual的更多信息
另一答案
在bash(和其他类似的shell)中,?
环境变量为您提供上次执行的命令的退出代码。所以你可以这样做:
#!/bin/sh
rm -rf "My Folder"
echo $?
UPDATE
如果执行了rm
命令后该目录不存在(因为它已成功删除,或者因为执行该命令时它不存在),脚本将打印0.如果该目录存在(这意味着命令已无法删除它)然后脚本将打印除0以外的退出代码。如果我正确理解这个问题,这正是请求的行为。如果不是,请纠正我。
另一答案
之前的答案是错误的:当dir不存在时,rm
不会以错误代码> 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
以上是关于输出结果来自正在运行的.sh脚本的主要内容,如果未能解决你的问题,请参考以下文章