почему функция cd в скрипте не работает

Я написал сценарий с целью изменения каталога, а затем сканирования файла.

#!/bin/bash model_dir=/mypath function chdir () { cd $1 } chdir ${model_dir}/config if [[ ! -s *.cfg ]] then echo `date` "configure file does not exist" exit 1 fi 

Я не понимаю, почему мой текущий каталог не изменяется после выполнения этого скрипта с помощью source myscript.sh .

  • Где команда cd настроена на cd $ HOME, когда путь не указан?
  • В чем смысл внешней команды `cd`?
  • Как изменить каталог на рабочий стол на немецком ubuntu?
  • Восстановить аудио CD после safecopy
  • в режиме «хорошо» - «дао», «-ао», «-тао» и «-разовый» режим записи для wodim
  • Почему я не могу перенаправить имя пути с одной команды на «cd»?
  • Звуковой проигрыватель Deadbeef не извлекает информацию в Интернете (freedb, CDDB) о дорожках CD
  • CDROM не отображается на Lenovo G50
  • 2 Solutions collect form web for “почему функция cd в скрипте не работает”

    Ваш скрипт и особенно его внутренние команды cd отлично работают при вызове из bash с использованием либо source либо эквивалента . команды.

    Основная проблема заключается в том, что, как уже было сказано в комментарии @adonis, ваша оболочка, после правильного изменения ее каталога, выйдет, если файл с именем «* .cfg» не существует, что очень сомнительно.

    Как я думаю, вы хотите использовать * .cfg как шаблон, вот как я немного изменил бы ваш скрипт, чтобы он работал, как ожидалось:

     #!/bin/bash # Note that the shebang is useless for a sourced script model_dir=/mypath chdir() { # use either function or (), both is a non portable syntax cd $1 } chdir ${model_dir}/config if [ ! -s *.cfg ]; then # Single brackets here for the shell to expand *.cfg echo $(date) "configure file does not exist" exit 1 # dubious in a sourced script, it will end the main and only shell interpreter fi 

    Это потому, что команда cd выполняется внутри скрипта, а не в текущей среде оболочки. Если вы хотите, чтобы сценарий запускался в текущей среде оболочки, запустите его так:

     . /path/to/script.sh 

    Вывод из моего собственного рабочего примера вашего скрипта с помощью pwd вместо вашего оператора if :

     Jamey@CNU326BXDX ~ $ /usr/local/bin/this.sh /cygdrive/c/users/jamey/downloads Jamey@CNU326BXDX ~ $ . /usr/local/bin/this.sh /cygdrive/c/users/jamey/downloads Jamey@CNU326BXDX /cygdrive/c/users/jamey/downloads $ 

    Обратите внимание на текущий рабочий каталог после запуска скрипта во второй раз.

    Interesting Posts

    Как установить Linux в систему без CD-ROM и без USB-загрузки?

    Объединение двух файлов для монтирования файловой системы внутри них

    установка cronjob во время IST

    Поиск команд в истории с прерывистыми ключевыми словами

    Почему один linux-дистрибутив работает быстрее, чем другой на ноутбуке?

    Arch Linux – подключение: сеть недоступна

    Действительно ли мне нужна опция -dmS на экране для стабильной работы фоновой работы?

    сортировать, но держать строку заголовка вверху

    Скорость передачи бит, показанная в `iw`, неожиданно низкая

    временная метка, время модификации и время создания файла

    PS1 для Bash + Korn

    Firefox теряет фокус при переключении раскладки клавиатуры

    Есть ли способ использовать подстановку параметров для запуска одного завитка на двух разных серверах?

    Как локально установить каталог Google Диска?

    Как запустить источник с помощью docker exec?

    Linux и Unix - лучшая ОС в мире.