我正在研究一個項目,在我的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