90467


### 目標

Rustからshell関数を使う

### 何を知りたいか

  * Rustから`Command::new()`で[`ls`を実行するみたいに](https://qiita.com/Kumassy/items/3fb3e52729e375efd5ed)shellの関数を呼び出す方法
  * 出来ないのであれば別の方法
  * 不可能であればその理由

### 試したこと

  * shell関数`_foo`を作って`~/.bashrc`に登録。  
ターミナルから`_foo`が使えることを確認。  
`Command::new("_foo").output()`を実行すると、`No such file or directory`と表示される。

  * `Command::new("bash")`で色々やってみたがよく分からなかった。


CC BY-SA 4.0
2022-08-09T18:37:09.727
90466
2022-08-09T19:48:53.110
52746
question
shellscript rust
Rustからshell関数を使いたい


`~/.bashrc`はシェルを対話的に実行するときに読み込まれるものなので、`bash -c`でコマンドを非対話的に実行する時には読み込まれません。

目的の関数を呼ぶ前に`~/.bashrc`を読み込んでやれば動くと思います。

[code]

    let output = std::process::Command::new("bash")
        .args(&["-c", "source ~/.bashrc && _foo"])
        .output()
        .expect("failed to run command");
    
    println!("stdout: {}", String::from_utf8_lossy(&output.stdout));
    println!("stderr: {}", String::from_utf8_lossy(&output.stderr));
    
[/code]


CC BY-SA 4.0
2022-08-09T19:48:53.110
90467
2022-08-09T19:48:53.110
8826
90466
answer