お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
投稿日:
ソフトウェア::MSYS2ソフトウェア::zsh

MSYS2のzshで.zshを叩いたときに次のエラーが出るときの対策

./test.zsh: 2 行: read: -q: 無効なオプションです
read: 使用法: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

動かないシェルスクリプトのサンプル

  • 但しこれは動く
    • echo "yes or no (y/N): "; if read -q; then; echo hello; else echo abort; fi
echo 'yes or no (y/N): '
if read -q; then
  echo y
else
  echo n
fi

解決方法

  • 次のようにshebangを入れてやる
    • 多分shが呼ばれているのだと思う
#!/bin/zsh

echo 'yes or no (y/N): '
if read -q; then
  echo y
else
  echo n
fi
投稿日:
ソフトウェア::Git

いくつか方法があるが、正直どれも使わないに越したことはない。しかし業務上の様々なしがらみなどでやむを得ず使うハメになることがある

ローカルで無視しておきたいがリモートで変更があったときには検知したいケース

リモートの変更まで無視してしまうと事故の元なので一番オススメ
git update-index --[no-]skip-worktreeを使う

  • .envのような個々人の環境によって異なるものがリポジトリ管理対象になっているときに使える
  • ブランチの切り替え時のコンフリクト対策としてはスクリプトを組んでおくと楽
ブランチ切り替え時のテクニック
  • ブランチで--skip-worktreeとなっている対象の変更を隠す
# --skip-worktreeの一括解除
git ls-files -v | grep ^S | sed -r 's/^S.(.+)$/\1/g' | xargs git update-index --no-skip-worktree
# 出てきた変更を全てスタッシュに入れる
git stash push -q -m stash_skiptree
  • 前項で隠した変更を再現して、--skip-worktreeし直す
# stashから戻す
git stash pop -q
# この時点での差分に対し--skip-worktree
git diff --name-only HEAD | xargs git update-index --skip-worktree

常に無視しておきたいケース

リモート側で重大な変更があったときにローカルで検知できないので事故りやすい
git update-index --[no-]assume-unchangedを使う
使ったことないので存在だけ記述して終わり

リポジトリの管理下にないファイルを常に無視するケース

--[no-]skip-worktree--[no-]assume-unchangedも使えないときにユースケースが存在するやつ

  • .git/info/excludeに無視対象のパスを記述することで無視できる
  • 自分のローカルにだけこっそり存在するdocker-compose.override.yamlみたいなのを無視するときに使える
投稿日:
ソフトウェア::VSCode言語::PHP::Xdebug

余計な例外を投げてくるのが面倒なのでそれを無視できるように

確認環境

Env Ver
PHP 7.1.3
Xdebug 2.9.4
VSCode 1.48.0

内容

"ignore"セクションを追加してそこに書いたファイルから出た例外は無視される

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9001,
            "ignore": [
                "**/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php"
            ]
        }
    ]
}

VSCodeのRemote - SSH拡張でSSH接続する時に毎回秘密鍵のパスフレーズを求められるのが面倒すぎるので、パスフレーズを記憶させて入力を省略させる方法を調べた

前提

  • Windows 10 or 11
  • Remote - SSH拡張を利用した公開鍵認証接続(パスフレーズあり)ができている
  • MSYS2を入れている

手順1

  1. PowerShellを管理者権限で起動させて次のコマンドを流す
    Set-Service ssh-agent -StartupType Automatic
    Start-Service ssh-agent
    Get-Service ssh-agent
    
  2. 秘密鍵をssh-agentに食べさせる
    ssh-add C:\Users\hoge\.ssh\id_rsa
    
  3. パスフレーズを求められるので入力
  4. 追加した秘密鍵が登録されていることを確認
     ssh-add -l
    
  5. VSCodeからRemote - SSHを使って接続する
  6. パスフレーズ無しで入れればOK、パスフレーズを求められたら以下の手順2へ

手順2

以下の警告が流れてうまく行かないケース、この場合はWindows付属のOpenSSHが腐っているので入れ替える

warning: agent returned different signature type ssh-rsa (expected rsa-sha2-512)
  1. PowerShellを管理者権限で起動させて次のコマンドを流して標準のOpenSSHをアンインストールする
    Get-Service -Name ssh-agent | Stop-Service
    sc.exe delete ssh-agent
    Remove-WindowsCapability -Online -Name "OpenSSH.Client~~~~0.0.1.0"
    Remove-WindowsCapability -Online -Name "OpenSSH.Server~~~~0.0.1.0"
    
  2. Chocolateyを入れる
    1. Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    2. chocoでインストール確認
  3. OpenSSHをインストールする
    choco install openssh --package-parameters="/SSHAgentFeature"
    
  4. サービスからssh-agentが実行中で自動起動するようになっていることを確認
  5. 秘密鍵をssh-agentに食べさせる
    ssh-add C:\Users\hoge\.ssh\id_rsa
    
  6. 追加した秘密鍵が登録されていることを確認
     ssh-add -l
    
  7. VSCodeからRemote - SSHを使って接続する
  8. パスフレーズ無しで入れればOK