Вы считали попытку PlayOnLinux? Это может заботиться обо всем этом для Вас, и даже можно настроить некоторые типы файлов, которые будут открыты винными программами.
Синтаксис псевдонима, который вы используете, не подходит для оболочки POSIX, для оболочки POSIX необходимо использовать:
alias name='replacement'
Но для всех оболочек это не может работать, поскольку замена псевдонима выполняется на ранней стадии синтаксического анализа.
Перед выполнением настройки вашего псевдонима вся строка была прочитана анализатором, и по этой причине ваша командная строка не будет работать.
Если псевдоним появится в следующей командной строке, он будет работать.
Такое поведение предназначено и определяется POSIX в разделе Подстановка псевдонима .
Псевдоним был заменен сразу после того, как оболочка выполнила Распознавание токена и до применения каких-либо Грамматических правил . В то время, когда вы вызывали псевдоним <имя>
, команда псевдоним
не была выполнена.
Если вам действительно нужен один -лайнер , то вы можете использовать функцию вместо псевдонима .
. вы делаете псевдоним py3
, но он работает только во второй строке:
$ alias py3=python3; py3 -c 'print("hello, world")'
Command 'py3' not found, did you mean:
command 'py' from deb pythonpy
command 'hy3' from deb python3-hy
command 'pyp' from deb pyp
Try: sudo apt install <deb name>
$ py3 -c 'print("hello, world")'
hello, world
Вы можете определить py3
как function
вместоalias
:
$ function py3() { python3 "$@"; }; py3 -c 'print("hello, world")'
hello, world
Или export -f
перед использованием в дочернем процессе позже:
$ function py3() { python3 "$@"; }; export -f py3; bash -c "py3 -c 'print("'"hello, world"'")'"
hello, world
И если вы понимаете разницу между переменной и псевдонимом/функцией , то вы также можете использовать переменную :
$ py3='python3'; $py3 -c 'print("hello, world")'
hello, world
и не надоexport -f
:
$ py3='python3'; bash -c "$py3 -c 'print("'"hello, world"'")'"
hello, world