我试着跑Laravel 的 Artisan通过定义 doskey 别名来在 (docker) 容器内执行命令。
我的想法是:
php artisan=docker-compose exec apache php artisan $1
但是它不允许我在键中使用空格。有什么办法可以实现吗?
编辑我为 Windows 制作了一个小型 GUI 工具来运行命令https://github.com/thomasmoors/DockerArtisan
答案1
在这种情况下,我必须给出否定的答案 - 在 doskey 名称中使用空格是不可能的。Doskey 是为命令提示符 (cmd) 创建的,因此概念上相当简单。
我认为这是不可能的,因为:
- 在诸如 的 doskey 命令中
doskey a b=ab
,它将“a”用作无效选项 - doskey 命令不接受宏名称周围的引号。
以下是我进行过的一些测试:
如您所见,一些特殊字符可以被接受,但不能接受空格。
即使宏名称中没有空格,doskey 也是一个旧的 DOS 程序,并且只能在 PowerShell 中工作,但效果并不好。它与PSReadLine
依赖本机控制台输入功能的模块相冲突。我测试了这个:
如您所见,您需要执行两个额外的操作:
- 发出命令
Remove-Module PSReadLine
- 向 doskey 命令添加参数
/exename=powershell.exe
当两者都完成后,命令就会正确执行并给出正确的错误。
我最好的建议是不要在 PowerShell 中使用 doskey。Doskey 很老,而 PowerShell 很新,两者一起使用很困难。我真的不认为 doskey 有用到不可替代的程度。
尝试找到另一种解决方案来处理您经常使用的命令。例如,将命令存储在可执行文件中(例如.ps1
或 ).cmd
,或.bat
存储在您要添加到 PATH 的文件夹中。
答案2
另一种解决方案是创建.bat
文件并使用参数运行它。我使用此解决方案来运行magento2
命令。
例子:
@ECHO OFF
IF "%1"=="clean" (
php bin/magento c:c & goto :exit
)
:exit
文件名:magento.bat
当我输入时magento clean
它会运行php bin/magento c:c
。
答案3
没有办法实现这一点。Doskey 宏名中不能有空格。
答案4
以下只是一个说明为什么在命令名称中允许使用空格很困难的例子:
假设我定义了两个宏:
doskey a b=echo 'ran cmd [a b] with input ' $*
doskey a b c=echo 'ran cmd [a b c] with input ' $*
如果您输入命令,C:\src>a b c efg
解释器如何知道您的意思是run cmd [a b] with input [c efg]
或run cmd [a b c] with input [efg]
。这适用于任何可执行文件,而不仅仅是 doskey 命令,如果您尝试解决这个问题,您可能会根据以相同名称开头的其他命令限制命令可以采取的输入。