Космос в доски / псевдоним для окон?
Я пытаюсь запустить команду Artisan от Laravel внутри контейнера (docker), задав псевдоним doskey.
Моя идея была:
php artisan=docker-compose exec apache php artisan $1
Однако это не позволяет мне использовать пробел в ключе. Есть идеи как этого добиться?
Я сделал небольшой графический инструмент для Windows, чтобы запускать команды https://github.com/thomasmoors/DockerArtisan
2 ответа
Я должен в этом случае дать отрицательный ответ - использование пробелов в имени доски невозможно. Doskey был создан для командной строки (cmd), поэтому он довольно прост по своей концепции.
Это невозможно по моему мнению, так как:
- В команде doskey, такой как
doskey a b=ab
, это принимает "а" для недопустимой опции - Команда doskey не принимает кавычки вокруг имени макроса.
Вот несколько тестов, которые я провел:
Как видите, некоторые специальные символы принимаются, но только без пробелов.
Даже без пробелов в имени макроса doskey является старой программой для DOS и может работать в PowerShell только с трудом. Это противоречит PSReadLine
модуль, который опирается на встроенные функции ввода с консоли. Я проверил это:
Как видите, вам нужно выполнить два дополнительных действия:
- Выполните команду
Remove-Module PSReadLine
- Добавьте в команду doskey параметр
/exename=powershell.exe
Когда оба они выполнены, команда выполняется правильно и выдает правильную ошибку.
Мой лучший совет - не использовать doskey в PowerShell. Doskey старый, а PowerShell новый, и их можно использовать только вместе с трудом. Я действительно не думаю, что доски настолько полезен, чтобы быть незаменимым.
Попробуйте найти другое решение для ваших часто используемых команд. Например, храните команды в исполняемых файлах, таких как .ps1
или же .cmd
или же .bat
внутри папки, которую вы добавили бы в PATH.
Альтернативным решением для этого является создание
.bat
файл и запустите его с параметрами. Я использую это решение для запуска
magento2
команды.
Пример:
@ECHO OFF
IF "%1"=="clean" (
php bin/magento c:c & goto :exit
)
:exit
имя файла:
magento.bat
и когда я печатаю
magento clean
это работает
php bin/magento c:c
.
Нет способа достичь этого. В макронаме Doskey не должно быть пробела.
Вот лишь один пример того, что затрудняет использование пробелов в именах команд:
скажем, я определяю два макроса:
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, и если вы попытаетесь обойти его, вы потенциально ограничите ввод, который может принимать команда, на основе других команд, начинающихся с того же имени.