Как изменить каталог из сценария, не называя сценарий с../сценарий, или выход сценарий при вызове../script.sh

В ударе:

$ read -a arr <<< 'Mary 34'
$ echo "${arr[1]}"
34

3
09.03.2015, 01:41
3 ответа

Тест с $ # Общее количество предусмотренных аргументов. Если $ # 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 пустой строки.

0
27.01.2020, 21:31

Сценарий закрывает сеанс SSH, потому что. ./script не создает подразделение, вместо этого он запускает скрипт в Текущая оболочка, поэтому выход здесь обрабатывается для текущего Интерактивная оболочка так нормально, что это выходит за сеанс.

0
27.01.2020, 21:31

Если скрипт вызывается как ./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/... аналога.

1
27.01.2020, 21:31

Теги

Похожие вопросы