😊
PowerShellでtouchコマンド (n度目の正直)
追記 (即日)
完璧に欲しいものが既にありました(当然)。
意外と見つけられないものですねぇ。こういう日が一番辛い。
結論
# ~\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
function touch() {
foreach ($file in $args) {
if ( Test-Path -Path $file ) {
Set-ItemProperty $file -name LastWriteTime -value (Get-Date) > $null
} else {
New-Item $file > $null
}
}
}
補足解説
$PROFILE を編集する
詳細: Microsoftのドキュメント / about_Profiles
.bashrc
だとか、シェル実行時に起動するファイルのPowerShell版は$PROFILE
変数に格納されています。
Windowsでは
PS $ echo $PROFILE
C:\Users\<username>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
ここに普段使いたいコマンドエイリアス等を記述しておくと、いつでも記述したエイリアスを参照できるようになります。やったね。
.ps1を記述する場合は、移植性が下がるので要注意。
あなたのプロファイル記述なんて他人は知りません。
必要な関数を手動インクルードで対応はできますが...。簡単なコマンドはインライン展開 (PowerShellで元から使えるコマンドに書き換え) した方が読み手に優しいと思います。
$null 変数って何
詳細: Microsoftのドキュメント / $nullについて...
一般的なnull
値としての使い方の他、/dev/null
としても扱えます。
> $null
では、標準出力を破棄すると同義ですね。頻出です。
わざわざ出力を明示的に破棄してあげないと、たった1つファイルを作るだけで10行もの出力が返ってきます。
ちなみにLinux、手前のWSL環境のDebianでは0行。IKWID、エラー以外のレスポンスは不要です。
Q&A
Q. -a
とかのオプションは?
A. (書き手の)手軽さに欠く為ありません。Get-
Set-
なんちゃらかWSLを使いましょう。
おまけ
mkdir
も出力を黙らせてみた
function mkdir() {
New-Item $args -ItemType Directory > $null
}
Set-Alias -Name md -Value mkdir -Option AllScope
関数は何の警告もなしにAllScope
コマンドを上書きできますが、Set-Alias
は-Option AllScope
を明示しないとエラー落ちします。
Discussion