VSCode:每个终端打开后如何运行命令?

时间:2017-08-11 12:23:39

标签: visual-studio-code vscode-extensions vscode-settings vscode-tasks

在Windows上,我必须在我打开的每个新终端会话上运行命令onscroll。我的开发环境是VSCode,我每天都会打开十几个新的终端。每个终端打开后,我必须手动运行此命令。

每次打开终端时,是否有办法在终端上运行此命令?

enter image description here

这可能采用VSCode扩展,VSCode配置(设置)或Windows环境配置的形式。

有什么想法吗?

6 个答案:

答案 0 :(得分:13)

在Linux系统上,您应该使用:

"terminal.integrated.shellArgs.linux"

在Windows和OSX上:

terminal.integrated.shellArgs.windows

terminal.integrated.shellArgs.osx

分别。

如果您想基于每个工作区应用shellArgs设置-尽管documentation指出:

第一次打开定义任何这些设置的工作区时,VS Code都会警告您,并且随后在此之后总是忽略值

至少VSCode 1.42版要求您输入以下内容:

“此工作空间要设置shellArgs,是否要允许它?”

See issue 19758


在Linux上,如果您使用的是bash(VSCode中shell的默认设置),则有一些细微之处:

  1. "terminal.integrated.shellArgs.linux": ["your_init_script.sh"]
    
    将执行脚本并立即关闭终端。为避免这种情况,您必须使用$SHELL命令结束脚本。
    #!/bin/bash
    echo "init"
    export PATH=$PATH:/xxx/yyy/zzz # or do whatever you want
    $SHELL
    
    但是那样一来,您最终会进入子shell 。有时(Read 1) (Read 2)是不可接受的。
  2. "terminal.integrated.shellArgs.linux": ["--init-file", "your_init_script.sh"]
    
    会将您留在初始Shell中,但不会执行.bashrc初始化文件。因此,您可能想在source ~/.bashrcyour_init_script.sh
    #!/bin/bash
    source ~/.bashrc
    echo "init"
    export PATH=$PATH:/xxx/yyy/zzz # or do whatever you want
    
  3. 如果存储库中已经有some_init_script.sh,并且由于某种原因不想添加source ~/.bashrc,则可以使用以下方法:
    "terminal.integrated.shellArgs.linux": ["--init-file", "your_init_script.sh"]
    
    your_init_script.sh
    #!/bin/bash
    source ~/.bashrc
    source some_init_script.sh
    
    some_init_script.sh
    #!/bin/bash
    echo "init"
    export PATH=$PATH:/xxx/yyy/zzz # or do whatever you want
    

    您可以在VSCode之外执行操作,而无需创建额外的文件。像这样
    bash --init-file <(echo "source ~/.bashrc; source some_init_script.sh")
    
    但是我无法将此字符串传递到terminal.integrated.shellArgs.linux中-需要以某种方式将其拆分为数组。而且我尝试过的所有组合都不起作用。

此外,您可以在特定文件夹中打开终端:

terminal.integrated.cwd

更改环境:

"terminal.integrated.env.linux"
"terminal.integrated.env.windows"
"terminal.integrated.env.osx"

甚至可以根据自己的喜好更改终端

terminal.integrated.shell.linux
terminal.integrated.shell.windows
terminal.integrated.shell.osx

terminal.external.linuxExec
terminal.external.osxExec
terminal.external.windowsExec

答案 1 :(得分:10)

问了这个问题后不久,我实际上找到了一个非常简洁的Linux解决方案。如果您使用Bash之类的外壳,它也应该在Windows上工作。我不确定是否可以使用香草CMD。

向您的.bashrc.zshrc添加类似的内容:

#
# Allow parent to initialize shell
#
# This is awesome for opening terminals in VSCode.
#
if [[ -n $ZSH_INIT_COMMAND ]]; then
    echo "Running: $ZSH_INIT_COMMAND"
    eval "$ZSH_INIT_COMMAND"
fi

现在,在VSCode工作空间设置中,您可以设置如下环境变量:

"terminal.integrated.env.linux": {
    "ZSH_INIT_COMMAND": "source dev-environment-setup.sh"
}

现在,脚本“ dev-environment-setup.sh”将自动在所有新的VSCode终端窗口中提供。

答案 2 :(得分:0)

对于使用精彩的cmder的任何人,您都需要与settings.json中的以下内容类似

{
    "terminal.integrated.shell.windows": "cmd.exe",
    "terminal.integrated.env.windows": {
        "CMDER_ROOT": "C:\\path\\to\\cmder"
    },
    "terminal.integrated.shellArgs.windows": [
        "/k",
        "%CMDER_ROOT%\\vendor\\bin\\vscode_init.cmd"
    ],
}

然后,您可以将应该已经存在于user_aliases.cmd中的所有别名添加到%CMDER_ROOT%\\config\\user_aliases.cmd文件中

答案 3 :(得分:0)

如果使用PowerShell,则可以在您的配置文件中添加PowerShell脚本,您可以在其中执行所需的操作。每个开发环境都有4个配置文件,存储在$ Profile中:

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

例如,使用

在VSCode中创建配置文件
code $profile.CurrentUserAllHosts

Some more details

答案 4 :(得分:0)

我在Windows上将以下内容用于Powershell:

{
    "terminal.integrated.shellArgs.windows": [
        "-NoExit",
        "-Command", "conda activate ./env"
    ]
}

答案 5 :(得分:0)

经过反复试验,以下内容在OSX上对我有用:

"terminal.integrated.shellArgs.osx": [
    "-l",
    "-c",
    "source script.sh; bash"
],

对于上下文,我将其与jupyter笔记本一起使用以设置不能简单地使用terminal.integrated.env.osx

定义的环境变量。