- 投稿日:
初回セットアップ
pacman -Syuu
# 一回落ちるのでもう一度起動して
pacman -Syuu
入れとくと便利なものたち
pacman
pacman -sS unzip
pacman -S --noconfirm unzip
pacman -sS diffutils
pacman -S --noconfirm diffutils
pacman -sS dnsutils
pacman -S --noconfirm dnsutils
pacman -sS openssh
pacman -S --noconfirm openssh
pacman -sS patch
pacman -S --noconfirm patch
pacman -sS perl
pacman -S --noconfirm perl
pacman -sS zsh
pacman -S --noconfirm zsh
pacman -sS git
pacman -S --noconfirm git
# prompt用に退避させる
mv /usr/bin/git /usr/bin/msys2_git
バイナリ追加
dotfileの設定
Windows Terminal連携
{
"defaultProfile": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
"profiles": {
"defaults": {},
"list": [
{
"commandline": "C:/env/msys64/msys2_shell.cmd -defterm -here -use-full-path -no-start -msys -shell zsh",
"font": {
"face": "Consolas",
"size": 11
},
"guid": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
"icon": "C:/env/msys64/mingw64.ico",
"name": "MINGW64 / MSYS2",
"colorScheme": "VSCode"
}
]
},
"schemes": [
{
"name": "VSCode",
"background": "#1e1e1e",
"foreground": "#d4d4d4",
"black": "#000000",
"blue": "#2472c8",
"brightBlack": "#666666",
"brightBlue": "#3b8eea",
"brightCyan": "#29b8db",
"brightGreen": "#23d18b",
"brightPurple": "#d670d6",
"brightRed": "#f14c4c",
"brightWhite": "#e5e5e5",
"brightYellow": "#f5f543",
"cyan": "#11a8cd",
"green": "#0dbc79",
"purple": "#bc3fbc",
"red": "#cd3131",
"white": "#e5e5e5",
"yellow": "#e5e510"
}
]
}
msys2_shell.cmdのCLI Optionsの意味合い
-mingw32 | -mingw64 | -ucrt64 | -clang64 | -msys[2]
それぞれで実行環境が変わる
-msys
で基本的に良い
-defterm | -mintty | -conemu
開くターミナルの指定
-defterm
- 標準ターミナルで開く
- Windows TerminalやVSCodeで開く場合はこれを指定する
-mintty
- Minttyが起動する
-conemu
- Conemuが起動する
-here
現在の作業フォルダをカレントディレクトリとして開く
-where DIRECTORY
指定ディレクトリをカレントディレクトリとして開く
-[use-]full-path
Windowsのパスを継承する
-no-start
新窓で開かない
指定しない場合start
コマンドでシェルが起動する
-shell SHELL
ログインシェルを指定する
例えば-shell zsh
ならzshがログインシェルになる
未指定の場合bashがログインシェルになる
msys2_shell.cmd
を書き換えて実現することもできるが、アップデートで書き換えた内容が消えることがあるのでオススメしない
-help | --help | -? | /?
ヘルプの表示
- 投稿日:
MSYS2でzsh使いたくない?使いたいよね?そう、使いたい!
しかしその上で一つ大きな障害があります
MSYS2のzshでプロンプトにGitのブランチを表示させようとすると微妙に上手くいきません
問題
.zshrc
を使ってPROMPT
に現在のGitブランチの状態を表示させようとするとフリーズするケースがあります
具体的には以下のような設定を書くとターミナルのサイズ変更時にシェルがフリーズします
原因は不明ですがPROMPT='$(git)'
だけでフリーズするのでGit for Windowsとの相性がなにか良くないのだと思っています
# git functions
current_git_branch() {
(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
}
parse_git_dirty() {
local DIRTY=$(git status -s | tail -1)
if [[ -n $DIRTY ]]; then
echo "%{$fg_bold[magenta]%})%{$fg_bold[red]%}✗"
else
echo "%{$fg_bold[magenta]%})%{$fg_bold[blue]%}✓"
fi
}
print_git_prompt() {
local FIND_BRANCH=$(git branch 2> /dev/null | tail -1)
if [[ -n $FIND_BRANCH ]]; then
echo "%{$fg_bold[magenta]%}(%{$reset_color%}%{$fg_bold[yellow]%}"$(current_git_branch)$(parse_git_dirty)" %{$reset_color%} "
else
echo ""
fi
}
# setting propmt
PROMPT="
%{$fg_bold[cyan]%}%n%{$reset_color%}%{$fg_bold[blue]%}@%m%{$reset_color%}:%{${fg_bold[green]}%}%~%{$reset_color%}
%(?:%{$fg_bold[green]%}➜:%{$fg_bold[red]%}➜) %{${reset_color}%}"'$(print_git_prompt)'
RPS1="%(?..%{$fg_bold[red]%} [ %? ]%{$reset_color%}) %D - %*"
解決策1
プロンプト表示に使うgitバイナリだけmsys2の物に差し替えると上手くいくようになります
具体的には以下のようにしてGit for Windowsと競合しないようにMSYS2のGitを構成しPROMPT='$(msys2_git)'
のように呼び出してやると上手くいきます
pacman -S git
mv /usr/bin/git /usr/bin/msys2_git
課題
- msys2/gitをアップデートするときに毎回リネームをする必要がある
- ここが面倒で脆弱性に繋がる可能性がゼロではない
解決策2
Git for Windowsだけでやる場合の方法です
add-zsh-hook precmd
でプロンプトに出したいコマンドを呼び出し、変数の値を書き換えてそれを表示するスタイルでやると上手くいきます
課題
- プロンプトの速度が遅い
- プロンプトする時に一瞬フォーカスが飛ぶ(別プロセルがコールされ一瞬窓ができている気がする
- 投稿日:
環境
Windows 10
Env | Ver |
---|---|
PHP | 8.0.2 |
Xdebug | 3.0.2 |
php.ini
zend_extension="xdebug-3.0.2-8.0-vs16-nts-x86_64"
xdebug.start_with_request=yes
xdebug.mode=debug
settings.json
別になくてもデバッグは出来る
"php.validate.executablePath": "C:/path/to/php.exe",
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
- 投稿日:
シェルスクリプトが設置されているパスを取得する
cwd=$(cd $(dirname $0); pwd)
$0
はシェルスクリプトのフルパスdirname
でスラッシュから始まるファイル名を除去cd
で移動pwd
で表示
現在のパスを移動せずにシェルスクリプト内でパスを移動する
これはサブシェルを使うと出来る
サブシェルとは()
で囲まれた部分で、この中では別のシェルが動いている
例えば次のスクリプトはfoo/
に移動し中のファイルリストを表示するが、2行目では現在の位置にあるファイルリストを表示するため移動していない
コマンド展開記法$()
もサブシェルが動いている
(cd foo/; ls -la)
ls -la
複数コマンドをワンライナーで実行する
;
- 以下のように書くと連続で線形実行される。手前が異常終了しても続く
curl; echo 2;
&
コマンドの末尾に&
をつけるとバックグラウンドで実行される
- 以下の例では左がバックグラウンド、右がフォアグラウンドで実行される
echo 1 & echo 2
&&
AndAlso的な動きをする
- 以下のように書くと連続で線形実行される。手前が異常終了すると続かない
curl && echo 2
|
コマンドの末尾に|
をつけると標準出力が次にリダイレクトされる
- 以下のように書くと連続で線形実行される。手前の標準出力が次にリダイレクトされる
echo 1 | xargs -I{} echo {}2
||
OrElse的な動きをする
- 以下のように書くと連続で線形実行される。手前が異常終了した場合のみ次が動く
curl || echo 1
- 投稿日:
使い方の簡単な参考
確認環境
Windowsで確認しているが、 Linuxでも多分同じ
Env | Ver |
---|---|
gpg (GnuPG) | 2.2.27 |
基本の使い方
- 鍵の一覧を確認する
gpg --list-keys
--with-keygrip
をつけるとKeyGrip(鍵の識別子?)も見れる
- 鍵を編集する
gpg --edit-key <Name>
<Name>
は鍵の名前か鍵IDを指定できる--expert
をつけると高度な編集が可能になる- 対話シェルが起動するので
help
を叩いてやりたい操作をする - 副鍵に対する操作は事前に
key <ID>
を指定する必要がある- 無指定で
delkey
とかするとエラーになる
- 無指定で
- 鍵をインポートする
gpg --import <key-file>