Тест с $ # Общее количество предусмотренных аргументов. Если $ # 0, не выпускайте команду выхода.
Я не уверен, что выглядит функция Change_cwd, потому что $ newdir
не имеет значения, но вот и пример того, что может работать:
VAR=$1
ARGC=$#
if test $ARGC -eq 0
then
printf "No argument provided, please provide what you want to check.\n"
else
change_cwd ()
{
cd $NEWDIR
}
fi
(непроверенная, но вы получаете герметичность ..)
Кроме того, это, вероятно, Neater для тестирования с тестом
--z
, чтобы проверить для EN пустой строки.
Сценарий закрывает сеанс SSH, потому что. ./script не создает подразделение, вместо этого он запускает скрипт в Текущая оболочка, поэтому выход здесь обрабатывается для текущего Интерактивная оболочка так нормально, что это выходит за сеанс.
Если скрипт вызывается как ./script
, то он не может изменить текущий каталог родительского процесса. Поэтому скрипт должен быть вызван как . ./script
.
Вы можете использовать встроенный return
для выхода из скрипта и возврата к его вызывающему абоненту. Это можно сделать только вне функции: в функции return
будет возвращаться из функции, а не из скрипта.
Имейте в виду, что если ваш скрипт является исходным, то он будет выполняться пользовательским shell'ом, а не bash, поэтому пользователи других shell'ов (zsh, fish, tcsh, ...) не смогут использовать ваш скрипт. Относительно легко писать скрипты, которые работают в bash и zsh (начните свой скрипт с , эмулирующего -L ksh 2>/dev/null
, и большинство вещей будет работать), заметно меньше - писать скрипты, которые также работают в fish и tcsh.
Альтернативный подход к работе с несовместимостями оболочки - это написание логики в выбранной Вами программе для разбора аргументов, определения в какую директорию изменять и т.д. Затем пусть Ваша программа распечатает код оболочки вызывающего абонента, и пусть абонент оценит вывод Вашего скрипта. Таким образом, ваш скрипт может выдать что-то вроде
cd /some/where
или
echo "Error: blah blah"; false
и будет вызван с помощью
eval "`./script`"
или tcsh/fish/... аналога.