次のディレクトリ変数と機能があります。
coding_dir="~/Documents/coding"
function f() { cd $1 && ls -a ; }
次のようなエイリアスを作成したいと思います。
alias rnd="f $coding_dir/random"
ただし、エイリアスを使用しようとすると、次のエラーが発生します。
f:cd: no such file or directory: /random
エイリアスとしてディレクトリ全体を使用できることはわかっていますがbash
。zsh
答え1
$coding_dirを設定する前にエイリアスを定義できますか?エラーメッセージを見ると、これが起こっているようです。
問題は、エイリアスを使用するのではなく、エイリアスを定義するときに$ coding_dirを拡張することです。
使用時に拡張したい場合は、使用するときに$ coding_dirのみを拡張するように単一引用符で定義する必要があります。
alias rnd='f $coding_dir/random'
$coding_dirをまだ定義せず、後で定義しても機能します。
$ coding_dir=~/Documents/coding
$ rnd
(should chdir to your $HOME/Documents/coding/random)
スペースを含むディレクトリ名を処理するために、エイリアスに引用符を追加することもできます。
alias rnd='f "$coding_dir"/random'
f 関数の定義もあります。
function f() { cd "$1" && ls -a ; }
答え2
問題は、引用符でチルダ文字を使用して発生します。たとえば、私のシステムの次の履歴を参照してください。
-0-1- ~ > x="~/tmp"
-0-1- ~ > cd $x
cd: no such file or directory: ~/tmp
-1-1- ~ > y="$HOME/tmp"
-0-1- ~ > cd $y
-0-1- ~/tmp > cd ..
-0-1- ~ > z=~/tmp
-0-1- ~ > cd $z
-0-1- ~/tmp >
チルダは引用符の中に含まれているため拡張されません。