скрипт 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 
  • невозможно открыть файл в качестве первого аргумента
  • Как сравнить число с плавающей запятой в сценарии оболочки
  • тип ksh с укрытием
  • Не могу понять этот скрипт. bash << (curl -s http://xxx.com)
  • Пока петля застряла в бесконечном цикле
  • Ошибка времени выполнения Awk: недостаточно аргументов
  • Создание сценария Bash, который будет выполнять программу, и если он выйдет без сбоев, снова запустит его
  • AWK: передача переменных оболочки awk
  • перемещать файлы со специальными символами в новый каталог
  • Перебирайте строки файла, файла раздела и классифицируйте каждый раздел
  • Как найти файл с использованием нескольких шаблонов
  • Linux и Unix - лучшая ОС в мире.