我有一個shell腳本(我將其導入到.bashrc中),它允許我從任何地方跳到我的項目目錄。Shell腳本在運行時認爲目錄不存在
cdp(){
proj="~/dev/projects/[email protected]/"
builtin cd $proj
}
_my_cdp()
{
local cur opts
cur="${COMP_WORDS[COMP_CWORD]}"
opts=$(ls ~/dev/projects/)
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
}
complete -o nospace -F _my_cdp cdp
的問題是,在第3行的cd
說:
bash: cd: ~/dev/projects/jsonparse/: No such file or directory
以下是完整的控制檯輸出顯示錯誤和證明的目錄存在。
amflare:~$ cd dev/projects/ (go to dir)
amflare:~/dev/projects$ ls -al (look at contents)
total 68
drwxrwxr-x 17 www-data amflare 4096 Dec 29 13:11 .
drwxrwxr-x 4 amflare amflare 4096 Dec 6 17:32 ..
drwxrwxr-x 3 www-data amflare 4096 Dec 22 17:33 bot
drwxrwxr-x 3 www-data amflare 4096 Dec 20 15:17 jsonparse
drwxrwxr-x 3 www-data amflare 4096 Dec 28 19:58 magic
drwxrwxr-x 2 www-data amflare 4096 Nov 11 14:42 test
amflare:~/dev/projects$ cd (go to home)
amflare:~$ cdp (run autocomplete)
bot jsonparse magic test
amflare:~$ cdp jsonparse (pick target)
bash: cd: ~/dev/projects/jsonparse/: No such file or directory
amflare:~$ (still in home)
我已經嘗試了所有我能想到的以及Google爲其他發行版(我在Ubuntu GNOME 16.04上)回饋的一些東西。無論我做什麼,shell腳本都不會承認~/dev/projects/
內存在任何東西。此外,當我有.bashrc
本身的功能時,它不起作用,所以我不認爲它是一個子外殼問題。如果您需要更多信息,請告訴我。謝謝。
這是因爲代字號未擴展。使用'proj =〜/「dev/projects/$ @ /」',並用引號括起來。或者使用變量'HOME':'proj =「$ HOME/dev/projects/$ @」'。請注意,使用'$ @'並不是很好。如果有幾個參數,你想要什麼? –
考慮通過http://shellcheck.net/運行此代碼 - 有*很多*錯誤;這可能無法抓住所有東西,但這是一個開始的地方。 –
...見,f/e,[ParsingLs](http://mywiki.wooledge.org/ParsingLs) - 'ls'是程序使用不當的工具。而且缺乏引用導致它自己的問題。 –