скрипт bash для cd в каталог

Этот файл bash, запущенный на терминале Mac, не смог изменить каталог. Достаточно сообщить, что он не существует, когда он действительно это делает. Любая вещь, я сделал не так?

#!/usr/bin/env bash set -e read name APPLICATION_PATH="~/Documents/meteor/apps/$name" cd "${APPLICATION_PATH}" 

3 Solutions collect form web for “скрипт bash для cd в каталог”

Есть два момента:

  • Проблемы с расширением тильды
  • Проблемы с поиском и выполнением.

Для части тильды очень недавний вопрос у суперпользователя был примерно такой же проблемой ( https://superuser.com/questions/1161493/why-bash-script-wont-extend-bashrc/1161496#1161496 )

Тильда расширяется до переменной, поэтому cd не может найти путь. Чтобы преодолеть это, выполните команду с eval как таковой:

 eval cd "${APPLICATION_PATH}" 

К сожалению, когда вы выполняете скрипт (я имею в виду, если он chmod'ed на «+ x», вызывая путь), вы увидите, что переменная $ PWD не изменяется в «текущей оболочке». Однако если вы добавите такую ​​строку в конец скрипта

 ls 

Вы увидите, что ls выполняется в новом рабочем каталоге. Как так?

Ответ здесь ( https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-scrip#176788 )

Короткий ответ: sourcing будет запускать команды в текущем процессе оболочки. выполнение будет запускать команды в новом процессе оболочки. все еще запутался? то, пожалуйста, продолжайте читать длинный ответ.

Вскоре, чтобы изменить $ PWD в текущей оболочке, вы должны «указать» сценарий как таковой:

 source /path/to/script 

или

 . /path/to/script 

Третий момент: если вы не хотите связываться с source или . , вы можете определить псевдоним в ~ / .bashrc ( https://stackoverflow.com/questions/752525/run-bash-script-as-source-without-source-command ):

alias mycmd = "source mycmd.sh"

вы можете использовать tilda '~', вам просто нужно включить правильный ключ расширения bash

 set -x 

или использовать полный путь '/ Volumes / Swap / Apps / …'

используйте bashrc для установки быстрых клавиш env, таких как

 export LocalApps=/Users/me/Applications export SysApps=/Applications 

я бы не использовал eval

если вы просто хотите сосать строку из командной строки, вам не нужно использовать read, просто возьмите arg

 if [[ $# -eq 1 ]]; then #check if it's directory if [[ -d $name ]] ; then #do stuff here else echo 'bomb' fi else usage fi 

вместо «cd-ing» в каталог узнайте, как использовать ~ +, ~ -, pushd и popd, много раз вам не нужно на самом деле «cd» в каталог

вы можете сделать что-то такое

 pushd $SysApps/$name do stuff popd 

Не помещайте ~ внутри ""

 #!/usr/bin/env bash set -e read name APPLICATION_PATH=~/Documents/meteor/apps/$name cd "${APPLICATION_PATH}" pwd 
  • проверка наибольшего количества определенной папки
  • VM-клонирование VS-скриптовая настройка / конфигурация
  • Как сделать вывод для grep неудачным?
  • Быстрый метод разделения строки из текстового файла?
  • Как получить записи таблицы psql в сценарии оболочки?
  • Скрипт командной строки с использованием строки
  • Как разбирать файл с конца в awk
  • Расширение параметра Shell
  • Запуск скрипта cron с lynx не работает
  • Любой способ в Bash писать в файл каждые X секунд, не закрывая его?
  • IF для возврата true, если слово содержит конкретное письмо
  • Linux и Unix - лучшая ОС в мире.