Если вы можете получить доступ к серверу SSH дома, но не за его пределами, возможно, вам потребуется настроить маршрутизатор. чтобы разрешить доступ с переадресацией портов SSH. Также обратите внимание, что вы не получаете доступ к удаленному компьютеру Ubuntu по локальному (обычно 192.168.xx) IP-адресу, а по общедоступному IP-адресу маршрутизатора, который вы можете найти, просто набрав в Google "какой у меня IP", пока в домашней сети.
Здесь есть кое-что.
$?
что-либо или сохранять это в переменной (, если только вам не нужно ссылаться на один и тот же статус выхода несколько раз ). return
требуется редко (редко с явным возвращаемым значением значение по крайней мере ). create_dir_if_needed
. [ result==0 ]
. Строка result==0
— это строка не-нулевой длины, и проверка строки таким образом вернет истину , если строка имеет не-нулевую длину, поэтому проверка всегда верна. Вместо этого вы, вероятно, хотели [ "$result" -eq 0 ]
. Имея это в виду:
create_dir_if_needed () {
mkdir -p -- "$1"
}
Это вернет статус выхода mkdir -p -- "$1"
. Эта команда создаст именованный каталог (и любые промежуточные каталоги ), если они еще не существуют. Если команде mkdir
не удается создать каталог, она завершится с нулевым статусом выхода, отличным от -, который станет статусом выхода функции. mkdir -p
не завершится ошибкой, если каталог уже существует.
Вы могли бы использовать это как
if ! create_dir_if_needed "$dirpath"; then
printf 'Failed to create directory "%s"\n' "$dirpath" >&2
exit 1
fi
или, поскольку функция тривиальна, вы можете избавиться от нее и сказать
if ! mkdir -p -- "$dirpath"; then
printf 'Failed to create directory "%s"\n' "$dirpath" >&2
exit 1
fi
Разновидность функции create_dir_if_needed
, которая использует mkdir
без -p
и поэтому никогда не создает отсутствующие родительские каталоги для заданного пути к каталогу:
create_dir_if_needed () {
if [ -d "$1" ]; then
return
fi
mkdir -- "$1"
}
или,
create_dir_if_needed () {
[ -d "$1" ] || mkdir -- "$1"
}
Вызов этой функции вернет истину(ноль ), если каталог уже существует или если вызов mkdir
прошел успешно. Оператор return
без явного значения вернет статус завершения самого последнего выполненного оператора, в этом случае он вернет положительный результат теста [ -d "$1" ]
.
Bash не работает как обычные языки программирования, когда речь идет о возвращаемых значениях.
Здесь вы путаете вывод из checkFolderExist с статусом возврата из checkFolderExist.
Ваши переменные CHECKINPUT и CHECKOUTPUT будут пустыми, потому что ваша функция ничего не делает echo
и printf
.
Если вы действительно хотите сохранить статус возврата функции для последующего использования, лучше сделать:
checkFolderExist "${INPUT}"
CHECKINPUT=$?
checkFolderExist "${OUTPUT}"
CHECKOUTPUT=$?
Помимо этого, я в любом случае рекомендую вам следовать советам в ответе Кусалананды , которые подскажут вам лучшие методы решения проблемы.