私がBashで好きで、PowerShellで行う方法を知りたいと思うことのいくつか:
Bashでは、現在の行と同じプレフィックスで始まるコマンドのみをスクロールするように履歴スクロールを設定しています。最新のコミットを確認したい場合(コメントの一部を再利用する場合など)、「git」と記述してから ↑。
関連するのはもちろん履歴検索です Ctrl + R
他のものを見つけるために、私は書きます:
h | grep foo
PowerShellで使用するもの:
h -c 1000 | where {$_.commandline.contains("foo")}
(明らかに私は初心者です、もっと短い方法があるに違いありません)
のようなもの:
mv file.txt{,.bak}
または
mv file.txt !#$.bak
魔法の空間(!$
をインラインで拡張します)
PowerShellの代替手段は何ですか?
(3)の場合、プロファイルに関数として記述できます(例:%USERPROFILE%\My Documents\WindowsPowerShell\profile.ps1
):
function hh ([string] $Word) {
Get-History -c 1000 | where {$_.commandline.contains($Word)}
}
次に:
hh foo
ただし、Powershellは、対話型シェルとしてよりもスクリプト言語として考えるのが最適です。これは、基盤となるコンソールがまだcmd.exeであり、すべての制限があるためです。
つまり、インタラクティブ履歴の場合はF7、前のコマンドをコピーする場合はF3、単一の文字をコピーする場合はF1、特定の文字まで前のコマンドをコピーする場合はF2などです。
1-あなたは使用することができます F8 Windowsコンソールから、現在の行の先頭に一致するコマンドを循環します。これは大文字と小文字を区別する一致です。
2-#
を使用して、前のコマンドと一致させることができます。 #<partial match><tab>
の使用では大文字と小文字が区別されず、前のコマンドの任意の位置のテキストと一致します。
次のコマンド履歴がある場合:
# 1
$np = Start-Process notepad -PassThru
# 2
$np| get-process
# 3
$np| Stop-Process
#pr
と入力してから tab 1、2、3を繰り返し循環します。
#st
と入力してから tab 1と3を繰り返し循環します。
#のみを使用すると、すべての履歴に一致します。
#
は、コマンドの一部を入力した後にも使用できます。あなたの歴史が:
'notepad'
select *
Get-Process #n<tab>| #s<tab>
と入力して、Get-Process 'notepad'| select *
を取得できます。
3-Select-String
を使用できます。使いやすくするためにエイリアスを作成します(PowerShellv3はエイリアスsls
を追加しました)。その後、あなたはすることができます。
h| sls foo
4-次のようなことができます。
gci *a.txt| ren -n {$_.Name + '.bak'}
5-$$
は最後のコマンドの最後のトークンと一致しますが、インラインで展開する方法がわかりません。
Oisin GrehanのPSReadlineモジュールを確認する必要があります: http://nivot.org/blog/post/2012/09/12/Emulating-Bash-GNU-Readline-with-PowerShell-
コードはここから入手できます: https://bitbucket.org/oising/psreadline/overview
これにより、行編集や履歴検索などの基本的なEMACSバインディングを追加することで、Windowsをときどき使用する経験豊富な* nix管理者の観点から、PowerShellを実際にCLIとして使用できるようになります。