63593


`~/.bash_aliases` であらかじめ以下のエイリアスを設定しておき、

[code]

    alias ll='ls -l'
    
[/code]

`~/bin/rootls.sh` にてエイリアスを用いたコマンドを実行しようとしています。

[code]

    #!/bin/bash
    ll /
    
[/code]

端末で以下のように実行したのですが、エイリアスが読み込まれていないようでした。

[code]

    $ BASH_ENV=~/.bash_aliases
    $ bash -O expand_aliases rootls.sh
    /home/naomeo0/bin/rootls.sh: 行 2: ll: コマンドが見つかりません
    
[/code]

なぜこのような結果になるのでしょうか。


CC BY-SA 4.0
2020-03-05T07:04:22.137
63591
2020-03-05T08:50:20.100
2020-03-05T08:50:20.100
3060
34540
question
linux bash shellscript
シェルスクリプト内のエイリアスコマンドを実行したい


1行でまとめて実行するか、

[code]

    $ BASH_ENV=~/.bash_aliases bash -O expand_aliases ~/bin/rootls.sh
    
[/code]

`export` で環境変数 BASH_ENV を設定してから実行してみてください。

[code]

    $ export BASH_ENV=~/.bash_aliases
    $ bash -O expand_aliases ~/bin/rootls.sh
    
[/code]

* * *

export を付けず単に `BASH_ENV=~/.bash_aliases` を実行しただけでは、コマンド実行後に設定が残りません。

[code]

    $ printenv BASH_ENV
    $                            # 事前に何も設定されていないことを確認
    
    $ BASH_ENV=~/.bash_aliases
    $ printenv BASH_ENV
    $                            # 設定は残らない
    
[/code]


CC BY-SA 4.0
2020-03-05T07:23:29.010
63593
2020-03-05T07:23:29.010
3060
63591
answer