質問するログイン新規登録

Q&A

1回答

1432閲覧

vscode の sshターミナル出力を常時テキストファイルに出力したい

boyon

総合スコア40

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

0グッド

0クリップ

投稿2024/10/09 01:12

0

0

実現したいこと

vscode の sshターミナル画面の出力内容を常時テキストファイルに出力して、後から確認できるようにしたいのですが、そのような機能はあるのでしょうか?

  • Teratermのログ出力機能と同様の機能を期待します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

bsdfan

2024/10/10 02:14

そういった拡張機能がありそうですが、見つかりませんね。 ちょっと実現したいこととズレるのでコメントにしますが、terminal.integrated.scrollback をある程度大きくしておけば、ターミナルの内容はずっと残っているので手作業のコピペでファイル保存はできると思います。 VS Code ではなく、接続先で記録をとるので良ければ script を使うのもいいと思います。ssh でつないだ時に自動で記録するようなことをやっておられる方もいます。 https://zenn.dev/book000/articles/linux-logging-by-script
boyon

2024/10/18 03:00

返事が遅れてすみません。ありがとうございます。 この script でやりたいことが実現できるかもしれません。 ためしてみたいと思います。 時間はかかりますが、経過はお知らせいたします!
boyon

2024/10/24 09:05

scriptで出力することができました。 しかし、/etc/profile.d/ に配置した シェルに記載したaliasがすべて無効になってしまいました。 このシェル内の変数は有効ですが、aliasが無効です。 script 起動後に このシェルを source で読み込むと、aliasが使えるようになりました。 惜しいところまでできてるんですけどねぇ。
melian

2024/10/24 09:34

/etc/profile.d 以下のファイルは /etc/profile で読み込まれるのですが、 ============ /etc/profile ============ if [ -d /etc/profile.d ]; then  for i in /etc/profile.d/*.sh; do   if [ -r $i ]; then    . $i   fi  done  unset i fi ============ /etc/profile はログインシェル、もしくは bash --login を実行する場合にのみ読み込まれて評価されます。 bash(1) > When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, ... なので、VSCode のターミナル起動時の bash 実行で --login オプションを追加する必要があります。(具体的な設定方法は私には判りませんが)
boyon

2024/10/25 09:01

--login オプション相当の設定は、以前にやっていました。 シェル内で定義した環境変数はLoadされますがaliasが無視されるという奇妙な現象です。 vscodeだけじゃなくて、Teratermでも起きます。 シェルの書き方がまずいのかもしれません。 というのも、apt upgrade を行うと、このシェルのせいで失敗するんです。 一時的にrenameして、for i in /etc/profile.d/*.sh; do から除外させると apt upgradeが成功しました。 でも、このシェルがないと仕事できないのでapt が終わったら戻します。 内容はこんな感じで、 kubernetess関連でよく使うコマンドを alias or functionにしています。 alias getstf="${KC_PATH} get statefulset" function execit() { ${KC_PATH} exec -it "$1" -- /bin/bash } apt upgradeを実行すると functionのところで syntax errorになるんです。意味不明です。 ということで、いただいた参考情報のようにprofileに script を追加することで期待の動作はできてます。 script を実行すると、 /etc/profile の実行がその時点で止まってしまうのでいいんだろうかという疑問はあります。 script 自体はよい解法だと思うので、この呼び出しを vscode 側にタイプさせればよいのかなと思ってます。 (できるかどうか不明ですが)
melian

2024/10/25 10:54

> functionのところで syntax errorになるんです。 > function execit() { function のパラメータ指定部 "()" は bash の拡張仕様です。おそらく、apt upgrade の内部処理(シェルスクリプトの呼び出し?)では dash が使われているのではないかと思います。その場合は "()" を削除します。(削除しても bash で問題なく動作します) function execit { ${KC_PATH} exec -it "$1" -- /bin/bash }
boyon

2024/10/28 09:11

筋違いな疑問にまで答えていただいて申し訳ないです。ありがとうございます。 dash なるものがあるのですね。初めてしりました。 このエラーは解消できたのですが、私の勘違いで原因はここではありませんでした。 うまく動作しない原因は script 側にあるようです。 /etc/profile にて script を起動したあとのterminalは、alias や finctionを忘れています。 exit で終了すると元のterminalに戻ります。 ここでは、自前のalias や function が使えます。 /etc/profile に script を設定するのではなく、ログオン後に script を実行した場合は 自前のshellをsource でloadしてalias や functionが使えました。 script の引数に -c でコマンド実行ができます。 ここで事前実行できないかと思ったのですが、シェルを指定すると即時終了してしまいました。 とても惜しいところまで来てる気がします。 自分でタイプしてscriptを起動するような記述方法があるのでしょうか?
guest

回答1

0

VSCodeの機能ではなく、PowerShellの機能を使う方法があるようです。ターミナルをPowerShellする必要があり、また、PoweShell単体で開いたときにも有効になってしまいますが。

https://zokibayashi.hatenablog.com/entry/2019/04/06/154736#%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC%E3%81%A7%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88

投稿2024/10/09 04:50

TakaiY

総合スコア14684

boyon

2024/10/09 05:06

回答ありがとうございます。 「ターミナルをPowerShellする必要があり」とは、 vscodeとは別に Powershell を開いて、ssh接続するということですか? それともvscode 内のターミナルをPowershellにすることができるのでしょうか?
TakaiY

2024/10/09 06:30

> vscode 内のターミナルをPowershellにすることができるのでしょうか Teratermが出てくるので質問者さんの環境を勝手にWindowsと思ってましたが、であれば、できます。 https://code.visualstudio.com/docs/terminal/basics ターミナルを開いた状態で、Select Default Profie から選択できます。
boyon

2024/10/18 03:06

返答を失念しておりました。すみません。 ・端末PCは windows です。 ・windowsのvscode内の ssh terminal の操作および出力する内容をファイル保管したいです ・OSのpowershellの設定を変えてみましたが、powershellを起動する分にはログがでることがわかりました ・しかし、vscode内のterminalをpowershellに変更しても、あくまで接続先の話なので、ログはでませんでした。 という結果で、やりたいことは実現できませんでした。 ありがとうございました。
TakaiY

2024/10/18 06:30

> あくまで接続先の話なので ということは、poweshellのウインドウからsshすると、その部分のログがpowershellのログに残っていないとうことでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問