Как установить код возврата из командной строки, не выходя из 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)

то он установит код возврата, выйдя из подоболочки в скобках, и не выйдет из вашей текущей оболочки. Затем вы можете проверить этот код, используя $? как обычно

alias mytest="if [ ! -f filename ] ; then echo 'Irregular file'; (exit 1) ; elif [ ! -r filename ]; then echo 'Unreadable file'; (exit 2); fi"

решение2

Функция оболочки должна иметь возможность возвращать 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;

Он будет работать так, как задумано.

Связанный контент