我正在研究一个项目,在我的GitLab CE实例(该部分正在工作!)中远程创建一个存储库,然后使用名称项目(工作!)和光盘进入该目录(这里是我有问题...),然后在本地初始化并添加远程存储库(工作!!!)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
到我的新创建的目录?我完全被难住了。
编辑:
打完了每ghoti功能和内.bashrc
和我的测试脚本中进行了测试。
当直接从bash的运行功能:
[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
所以脚本仍在运行作为一个孩子,因此没有更新父shell的当前目录。我唯一的选择是在脚本的末尾生成一个新的shell?
您的'test2'脚本仍然是单独的*脚本*,并且不在您的交互式shell中运行。 test2内部有一个名为'mkcd'的函数不会改变它运行在通过在交互式shell中运行'bash'创建的子shell中的事实。而不是运行'bash test2“Hello World”,使test2成为运行shell中的一个函数,并运行该函数。 – ghoti
但是,我试图完全取决于它是一个脚本。 –
那么,现在你有多个答案,包括你自己的答案,并且你明白你为什么遇到了问题。如果你真的想能够将交互式shell中的目录改变为由脚本创建的目录,那么可以通过多种方式将它们合在一起,并且在我的答案中描述了一种方法。考虑到你的问题的细节程度,它是否适用于你是我不可能知道的。 – ghoti