我对 Unix 真的很陌生,目前我需要创建一个别名来检查文件是否规则且可读。如果它不规则,那么我需要返回 1 作为退出代码,而不是测试它是否可读。如果它不可读,我需要返回 2 作为退出代码。
alias test="if [ ! -f filename ] ; then echo 'Irregular file'; exit 1 ; fi; if [ ! -r filename ]; then echo 'Unreadable file'; exit 2; fi;
现在的问题是,当我运行它时,退出将关闭我的整个客户端。有办法解决这个问题吗?
答案1
因为这是在 Google 中进行搜索时的第一个链接:
如果将出口括在括号中
(exit 2)
然后它将通过退出括号中的子 shell 来设置返回代码,并且不会退出当前的 shell。然后您可以使用 $? 测试该代码。像平常一样
alias mytest="if [ ! -f filename ] ; then echo 'Irregular file'; (exit 1) ; elif [ ! -r filename ]; then echo 'Unreadable file'; (exit 2); fi"
答案2
shell 函数应该能够获得return
您喜欢的值:
checktype() {
if [ ! -f "$1" ] ; then
echo 'Irregular file'
return 1
fi
if [ ! -r "$1" ]; then
echo 'Unreadable file'
return 2
fi
return 0
}
$ checktype /dev/stdin ; echo $?
Irregular file
1
另外,test
对于别名或函数来说,这是一个糟糕的名称,因为它是一个标准(内置)实用程序。
我意识到别名是一个糟糕的选择,但目前教授要求使用别名。
好吧,这改变了一些事情。我的建议是向教授展示一种更合适的解决方案,并解释为什么简单的解决方案不起作用。
但万一这行不通,而你真的必须使用别名,请考虑返回值实际上只是执行的最后一个命令的返回值。你应该能够装配一些东西来返回你想要的值......
(如果是家庭作业,我认为立即给出完整的解决方案是不公平的。下面有剧透。)
提示:您已经使用了返回任意值的命令。
答案3
alias
这里是一个糟糕的选择。将这些行放入 bash 脚本文件中。
#!/bin/bash
if [ ! -f filename ];
then echo 'Irregular file'; exit 1 ;
fi;
if [ ! -r filename ];
then echo 'Unreadable file'; exit 2;
fi;
它将按预期工作。