私はどこからでもプロジェクトディレクトリにジャンプできるシェルスクリプト(.bashrcにあります)を持っています。シェルスクリプトは、cdを実行しているときにディレクトリが存在しないと考えています
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によ)のために戻ったいくつかのことを試してみました。私が何をしても、シェルスクリプトは~/dev/projects/
の中に何かの存在を認めません。さらに、それは私自身が.bashrc
の機能を持っていると動作しないので、サブシェルの問題ではないと思います。これ以上の情報が必要な場合はお知らせください。ありがとう。
チルダが展開されていないためです。 'proj =〜/" dev/projects/$ @/"'を引用符のうちのチルダで置き換えてください。あるいは、変数 'HOME'を使用してください:' proj = "$ HOME/dev/projects/$ @" 'しかし、 '$ @ 'を使うことは本当に良いことではないことに注意してください。いくつかの議論がある場合、あなたは何を望みますか? –
http://shellcheck.net/でこのコードを実行することを検討してください。それはすべてを捕らえないかもしれませんが、始める場所です。 –
...参照、f/e、[ParsingLs](http://mywiki.wooledge.org/ParsingLs) - 'ls'はプログラム的な使用には不適切なツールです。そして引用全体の欠如は、それ自身の問題につながります。 –