Gus*_*uss 9 powershell console command-line command-history
在 MS-Windows 下的命令行中让我发疯的一件事是,当您使用向上和向下箭头键时,Windows shell(标准 shell 和 PowerShell)从历史记录中检索命令的顺序。
我逐渐喜欢的标准方式,因为它基本上在世界上所有其他 shell 中都是这样做的,是将最后一个命令放入历史堆栈,然后按 up 将检索我运行的最后一个命令,“向上”再次将检索之前的那个,依此类推。如果您从历史记录中选择一个命令并再次提交,该命令将被复制到堆栈的顶部,如果您在下一个提示中向上按,您可以看到最后一个命令,然后是上一个到最后一个命令。如果在浏览历史记录后按“向下”键越过历史堆栈中最近的命令,您将返回到空提示(或您开始浏览历史记录之前的任何提示)。
在 Windows shell 中,它的工作方式非常不同:如果历史记录中有 3 个命令——例如让我们称它们为“A”、“B”和“C”——并且你使用向上箭头键选择命令“B”并执行再次,然后在下一个提示中再次使用向上箭头键,外壳将显示“B”。但这不是您执行的最后一个命令(尽管“B”确实再次复制到历史堆栈中),就像您再次按“向上”键一样,您将显示“A”而不是“C”。如果您向下浏览(到后面的条目),您将再次看到“B”,然后是“C”,然后是“B”,这是输入的最后一个命令 - 但您也不能再进一步:那里
我的问题 - 是否可以设置一些设置来改变这种行为?
我知道只获取 bash 或类似的东西并在 Windows 上使用它的选项,但由于外部限制(如 - 这就是我需要在其中编写脚本的内容),我必须在 PowerShell 或其他 Windows 中工作可以调用 PowerShell 脚本的 shell。
小智 6
有一种不同的方式来控制历史堆栈,这不是您想要的,但您应该查看它的不同选项。
在属性(或默认)中,当您右键单击左上角时,有一个选项“丢弃旧重复项”勾选它,堆栈将更改其行为。
在您的示例中执行"A", "B", "C"
. 然后两次执行"B"
,堆栈将如下所示:
"B","C","A" (first up will be "B")
另外,不要忘记F7
。这会弹出一个DOS
- 样式菜单,显示命令历史记录(ESC 使其消失)。将显示输入的或使用向上箭头选择的“最后一个”命令,因此您将立即看到您在向上/向下箭头上下文中的位置。
显然,这是来自一个名为DOSKEY的东西,这是一个文档很少的实用程序。例如,除了向上、向下、然后回车执行命令之外,我发现向右或向左箭头键会将其放在提示符处而不执行(因此您可以编辑它)。PgUp/PgDn/Home/End 将以明显的方式浏览列表,我刚刚发现(没有在任何地方看到它记录),如果您按命令的第一个字母,它将循环浏览以该字母开头的命令(因此,请输入一个命令,例如通过按tehze fun start now!
轻松跳转到历史记录中的该点)。z
F7
不过,如果有人预见到历史将重演,也许最好
doskey /history > editme.bat
Run Code Online (Sandbox Code Playgroud)
而不是遭受弹弓和箭矢,并从所述记录中复制/粘贴(或者让你的爪牙将其制作成脚本)。
Joel Spolsky 的文章中还有其他一些命令提示符技巧可能并不广为人知。我不知道通配符扩展,因此您可以通过键入名称的最后一个字符或中间字符来使用制表符补全。
我发现 Windows 提示符很奇怪,但认为它是死胡同,并且只有在看起来会减少我与它的交互时才学习这些琐事。如果有机会,我相信最好安装 cygwin,以获得更多表达 shell 和更少烦人的环境,以及您可以在其他地方使用的技能和脚本。
归档时间: |
|
查看次数: |
997 次 |
最近记录: |