AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1874644
Accepted
plswork04
plswork04
Asked: 2025-01-31 06:57:58 +0800 CST2025-01-31 06:57:58 +0800 CST 2025-01-31 06:57:58 +0800 CST

如何在每个 Visual Studio Code 工作区中拥有不同的 .bash_history?

  • 772

我希望每个 VSCode 工作区都有不同的 bash 历史记录。似乎设置:

"terminal.integrated.env.linux": { "HISTFILE": "${workspaceFolder}/.bash_history" ...

会非常危险。

在 bash 中为每个工作目录创建历史记录日志

... 迟早你会在公开的存档或存储库中泄露一些机密命令。在多用户计算机上,只要你切换到另一个用户的目录并在那里运行一些命令,他们就可以修改你的文件,并可能获得你帐户的后门。而其他用户或你下载存档的人可以通过将命令注入你的 shell 历史记录中,轻松地诱骗你运行命令。

– Gilles ‘所以,别再作恶了’ 评论于 2016 年 8 月 24 日 23:15

即将历史记录保存到您的工作区是不好的,因为您将使用秘密(密码,密钥等)运行命令,并且您会在某个时候将您的历史记录泄露到目录 tar 或 docker 镜像中,即使它在您的 git ignore 中。

我发现的一种方法:

  • 要点:DeveloperChris/LocalHistoryVSCODE.md在 Visual Studio Code 中创建每个项目/文件夹历史文件 - VSCODE
bash
  • 2 2 个回答
  • 41 Views

2 个回答

  • Voted
  1. Destroy666
    2025-01-31T08:17:05+08:002025-01-31T08:17:05+08:00

    另一种方法——设置HISTFILE如下terminal.integrated.env.linux:

    ${env:HOME}/history${workspaceFolder}/.bash_history
    

    ${env:HOME}/history您喜欢的安全文件夹在哪里。

    优点:

    • 适用于任何地点设置的工作空间,同时保证安全
    • 无需编辑 shell 配置即可轻松设置

    缺点:

    • 有点难以访问,${env:HOME}/history/.bash_history_${workspaceFolderBasename}如果你不希望有任何重复的存储库名称,你可以使用类似的方法来缩短路径

    还要注意,由于它是针对每个系统而不是 shell,因此使用相同环境的所有 shell 都将写入同一个文件,这可能既是优点也是缺点,具体取决于 shell 和用法 - 例如,如果您使用 将 Bash 调整为 ZSH HISTTIMEFORMAT。并且,为了避免这种情况,您始终可以编辑terminal.integrated.profiles.linux特定 shell 的和环境。

    • 1
  2. Best Answer
    plswork04
    2025-01-31T06:57:58+08:002025-01-31T06:57:58+08:00

    为了更智能地实现这一点,我们需要比 vscode 设置中更多的逻辑。

    在您的用户全局中settings.json:

    "terminal.integrated.env.linux":  {"VSCODE_WS": "${workspaceFolder}"},
    "terminal.integrated.env.windows":{"VSCODE_WS": "${workspaceFolder}"},
    "terminal.integrated.env.osx":    {"VSCODE_WS": "${workspaceFolder}"},
    

    在您的.bashrc(编辑以满足您的需要):

    # Enable separate bash history per workspace: 
    # Assume the following is in vscode settings:
    # "terminal.integrated.env.linux": { "VSCODE_WS": "${workspaceFolder}"  },
    
    # When in filemode / not in a workspace, `VSCODE_WS` is set to the literal `${workspaceFolder}` so we check and ignore that
    if [[ -v VSCODE_WS ]] && [[ "$VSCODE_WS" != '${workspaceFolder}' ]]; then
    
        # Only change history file if we know it will be written to a safe place
        if [[ "$(dirname "${VSCODE_WS}")" == "$HOME/code" ]]; then
            HISTFILE="${VSCODE_WS}/../.bash_history_$(basename "${VSCODE_WS}")"
            
            # Write to history after every command
            shopt -s histappend
            # Avoid adding duplicate commands
            if [[ ! "$PROMPT_COMMAND" =~ "history -a" ]]; then
                #echo set PROMPT_COMMAND
                PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
            fi
        fi
    fi
    

    我决定让历史文件易于查找并唯一地标识工作区。我检查了所有 git 存储库,~/code所以我知道将历史文件写入该目录与写入目录一样安全~。第二个“if”将历史文件的范围设置为仅此目录中的工作区。但它不能~/code/big-proj/sub-proj作为工作区打开。不过,这只是我第一次找到我想要的东西。

    将第二个“if”更改为适合您的内容。简单地删除它是不明智的。并根据您的需要进行更改 HISTFILE。它是 bash,因此您可以做任何您愿意忍受的事情。您可以创建对工作区整个路径进行编码的文件名,并使用一个目录来存放所有历史文件。或者使用简单的文件名并接受来自具有相同名称的多个文件夹/工作区的冲突。只需记住 OP 的安全警告。

    • 0

相关问题

  • 在非 root 用户上用 bash 替换 zsh

  • 在 macOS High Sierra 的终端中设置环境变量时遇到问题

  • 对于 cp 或 mv,是否有等同于 cd - 的东西?

  • Notify-发送窗口下出现的通知

  • 如何从 WSL 打开 office 文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve