Symlinkを介してアクセスすると、bashスクリプトが引数を処理する方法の微妙さを理解するのが困難です。この問題は、コマンドと出力によって最も簡単に説明されます。
$ type ll
ll is aliased to `ls -Alt --color=auto'
$ cat myshellscript
#!/bin/bash
type $1
$ ls -l myshellscript
-rwxr-xr-x 1 pi pi 20 Aug 22 19:55 myshellscript
$ . myshellscript ll
ll is aliased to `ls -Alt --color=auto'
$ ls -l /usr/local/bin
total 0
lrwxrwxrwx 1 root root 21 Aug 22 19:56 mss -> /home/pi/sh/myshellscript
$ mss ls
ls is /bin/ls
$ echo "OK, that worked"
OK, that worked
$ mss ll
/usr/local/bin/st: line 2: type: ll: not found
$ echo "Why didn't that work?"
Why didn't that work?
答え1
デフォルトでは、エイリアス拡張はスクリプト内で無効になっています。例をご覧ください。
実行するとき
. myshellscript ll
あなたはただ走っているわけではありませんmyshellscript
。購入エイリアスのある現在の(対話型)シェルに入ります。はい大きくする。対照的に、あなたが走るとき
mss ls
スクリプトを実行すると、予想どおりエイリアス拡張は発生しません。代わりに実行すると、./myshellscript ll
同じ結果が表示されます。. myshellscript ll