Я работаю над проектом для удаленного создания репозитория в моем экземпляре GitLab CE (эта часть работает!), А затем для создания каталога с именем проект (рабочий!) и cd в этот каталог (вот где у меня проблема ...), а затем инициализировать локально и добавить удаленный репозиторий (работает !!!)скрипт bash для создания и cd в каталог с пробелами в имени
Проблема, которую я имею, меняет в новый каталог. Использую ли я код, показанный ниже, или просто попробую cd "$1"
или cd "$*"
Я не могу заставить его работать вообще!
#!/bin/bash
dir="$*"
wd=$(pwd)
fulldir="$(pwd)/${dir// /\\ }/"
echo "Creating directory $dir"
mkdir -v "$dir"
cd "$dir"
echo "Changing current directory to $dir"
echo $dir
echo $fulldir
Выход этого кода:
[email protected]:~# ls
glnewproj test
[email protected]:~# bash test Hello World
Creating directory Hello World
mkdir: created directory 'Hello World'
Changing current directory to Hello World
Hello World
/root/Hello\ World/
[email protected]:~# ls
Hello World glnewproj test
[email protected]:~# pwd
/root
Как я могу cd
в моей вновь созданный каталог? Я полностью в тупике.
Edit:
отпечатал функцию за Ghoti и протестировали его в .bashrc
и в моем тестовом скрипте.
При выполнении функции непосредственно из Баш:
[email protected]:~# ls
glnewproj test test2
[email protected]:~# mkcd "Hello World"
[email protected]:~/Hello World#
При выполнении функции внутри нового тестового сценария:
[email protected]:~# ls
glnewproj test test2
[email protected]:~# cat test2
#!/bin/bash
mkcd() {
mkdir -p "$1" && cd "$1"
}
mkcd "$1"
[email protected]:~# bash test2 "Hello World"
[email protected]:~# ls
Hello World glnewproj test test2
Так что сценарий все еще работает как ребенок, и, таким образом, не обновляется текущий каталог родительской оболочки. Является ли мой единственный способ создать новую оболочку в конце скрипта?
Ваш скрипт 'test2' по-прежнему является отдельным * скриптом * и не работает в вашей интерактивной оболочке. Тот факт, что test2 внутренне имеет свою собственную функцию под названием 'mkcd', не изменяет того факта, что он запущен в подоболочке, которую вы создали, запустив' bash' в вашей интерактивной оболочке. Вместо запуска 'bash test2« Hello World », сделайте test2 функцией внутри вашей рабочей оболочки и запустите эту функцию. – ghoti
То, что я пытаюсь сделать полностью, зависит от того, что это сценарий. –
Теперь у вас есть несколько ответов, в том числе ваши собственные, и вы понимаете, почему у вас возникла проблема. Если вы действительно хотите изменить каталог в своей интерактивной оболочке на то, что создано вашим скриптом, существует несколько способов взлома, и я описал один в своем ответе. Является ли это применимым к вам, то, что я не могу знать, учитывая степень детализации вашего вопроса. – ghoti