web-dev-qa-db-ja.com

VSCode:各ターミナルが開いた後にコマンドを実行する方法は?

Windowsでは、開いた新しいターミナルセッションごとにコマンドstart-ssh-agent.cmdを実行する必要があります。私の開発環境はVSCodeで、毎日12個の新しい端末を開いています。各ターミナルが開いたら、このコマンドを手動で実行する必要があります。

ターミナルを開くたびに、ターミナルでこのコマンドを実行する方法はありますか?

enter image description here

これは、VSCode拡張機能、VSCode構成(設定)、またはWindows環境構成の形式をとることがあります。

何か案が?

8
Sébastien

次のことができます。

"terminal.integrated.shellArgs.windows": ["start-ssh-agent.cmd"]

変更元: https://code.visualstudio.com/docs/editor/integrated-terminal#_Shell-arguments

8
Jacob Bolda

質問をした直後に、私は実際にこれに対するかなりきちんとしたLinuxソリューションを見つけました。 Bashのようなシェルを使用している場合は、Windowsでも機能するはずです。 VanillaCMDを使用してそれが可能かどうかはわかりません。

このようなものを.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ターミナルウィンドウで自動的に提供されます。

1
Hubro

素晴らしい 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ファイルに追加できます。

0
airstrike

Linuxシステムでは、以下を使用する必要があります。

"terminal.integrated.shellArgs.linux"

WindowsおよびOSXの場合:

terminal.integrated.shellArgs.windows

そして

terminal.integrated.shellArgs.osx

それぞれ。

ワークスペースごとにshellArgs設定を適用したい場合は、 documentation と言っているにもかかわらず、適用できます。

これらの設定のいずれかを定義するワークスペースを初めて開くと、VS Codeは警告を表示し、その後はその後常に値を無視します

少なくともバージョン1.42のVSCodeは、次のような質問をします。

「このワークスペースはshellArgsを設定したいのですが、許可しますか?」

問題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
    
    しかし、そうすると、サブシェルになります。時々それは受け入れられない (Read 1)(Read 2)
  2. "terminal.integrated.shellArgs.linux": ["--init-file", "your_init_script.sh"]
    
    は最初のシェルのままになりますが、.bashrc初期化ファイルは実行されません。したがって、source ~/.bashrc 内でyour_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
0
x00

PowerShellを使用している場合は、PowerShellスクリプトをプロファイルに追加して、必要な操作を実行できます。各開発環境には4つのプロファイルがあり、$ Profileに格納されています。

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

たとえば、VSCodeでプロファイルを作成します

code $profile.CurrentUserAllHosts

詳細

0
theq