如何在不退出 SSH 客户端的情况下从命令行设置返回代码?

如何在不退出 SSH 客户端的情况下从命令行设置返回代码?

我对 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;

它将按预期工作。

相关内容