:!echo $0 /bin/sh 我为我的系统上通常使用的 shell 定义了许-6ren">
gpt4 book ai didi

haskell - 更改用于在 GHCi 中运行 "shell commands"的 shell

转载 作者:行者123 更新时间:2023-12-02 10:26:31 24 4
gpt4 key购买 nike

在 GHCi 中,可以使用 :!<command> 执行 shell 命令。默认情况下,似乎 sh shell使用:

Prelude> :!echo $0
/bin/sh

我为我的系统上通常使用的 shell 定义了许多别名和自定义函数 ( fish ),我想使用 GHCi 中的这些别名和自定义函数,但不必将它们转换为 sh - 兼容版本。

有没有办法更改 GHCi 用于执行的 shell :!命令?我找不到任何:set选项,也没有 GHCi 的任何命令行参数来执行此操作。

最佳答案

:! command in current versions of ghci是调用 System.Process.system

-- | Entry point for execution a ':<command>' input from user
specialCommand :: String -> InputT GHCi Bool
specialCommand ('!':str) = lift $ shellEscape (dropWhile isSpace str)
-- [...]

shellEscape :: String -> GHCi Bool
shellEscape str = liftIO (system str >> return False)

我怀疑system被硬编码到/bin/sh,但你没有理由不能define your own ghci command进行 fish 调用。我没有安装 fish,因此我将使用 bash 作为示例:

λ import System.Process (rawSystem)
λ :def bash \cmd -> rawSystem "/bin/bash" ["-c", cmd] >> return ""
λ :bash echo $0
/bin/bash

关于haskell - 更改用于在 GHCi 中运行 "shell commands"的 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46116329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com