Это основано на превосходном скрипте @ Flint.
Сначала я попробовал переменную "Z:"%U в конце поля рабочего файла Exec= для программ Wine. Он работал нормально, пока я не открыл программу без указанного файла. Винные программы жаловались на отсутствие файла, потому что строка Exec= указывала на диск Z: это явно не файл, а абсолютный путь к файлу. File not found: Z: или похожие сообщения, появившиеся в программе Wine. Бит раздражает.
Проблема с "Z:"%U заключается в том, что она не является условной переменной, если там используется Z:. Тем не менее, Wine абсолютно требует Z: потому что в противном случае он не может найти правильные пути к файлу.
Ваш скрипт делает всю вещь "Z:"%U условной. Скрипт выполняет задание точно так, как я хотел.
Однако сценарий должен учитывать все файлы exe, написанные в верхнем регистре. К настоящему времени он не может указывать файлы MS Office (docx, pptx ...) на MS Office 2010, потому что все исполняемые программы исполняются как WINWORD.EXE или POWERPNT.EXE. Конечно, исполняемые файлы можно было переименовать в нижнем регистре, но я предпочитаю более универсальное решение, вместо того чтобы переименовывать отдельные exe для каждой программы.
Грязное и универсальное решение заключается в изменении кода сценария, например:
#!/bin/bash
allargs=("$@")
fixpath=0
for idx in "${!allargs[@]}"; do
arg="${allargs[$idx]}"
if [[ $fixpath -eq 0 ]]; then
# fix file paths only after the first executable is found in arg
if [[ "$arg" == *.exe ]]; then
fixpath=1
fi
if [[ "$arg" == *.EXE ]]; then
fixpath=1
fi
continue
elif [[ $fixpath -eq 1 ]]; then
# if arg starts with '/' and it's a path that exists on host
# precede the path with drive 'Z:'
if [[ "${arg:0:1}" == '/' && -e "$arg" ]]; then
allargs[$idx]="z:${arg//\//\\}"
fi
fi
done
exec env "${allargs[@]}"
Оператор or по какой-то причине не работал. Я уверен, что есть более элегантный способ добиться такого же результата.
Создайте USB-накопитель или загрузочный компакт-диск, если у вас есть запасной накопитель или система. Просто следуйте инструкциям в ubuntu . См. Правую сторону для получения информации конкретно о вашей ОС.
Создайте USB-накопитель или загрузочный компакт-диск, если у вас есть запасной накопитель или система. Просто следуйте инструкциям в ubuntu . См. Правую сторону для получения информации конкретно о вашей ОС.
Создайте USB-накопитель или загрузочный компакт-диск, если у вас есть запасной накопитель или система. Просто следуйте инструкциям в ubuntu . См. Правую сторону для получения информации конкретно о вашей ОС.
Создайте USB-накопитель или загрузочный компакт-диск, если у вас есть запасной накопитель или система. Просто следуйте инструкциям в ubuntu . См. Правую сторону для получения информации конкретно о вашей ОС.
Создайте USB-накопитель или загрузочный компакт-диск, если у вас есть запасной накопитель или система. Просто следуйте инструкциям в ubuntu . См. Правую сторону для получения информации конкретно о вашей ОС.
Создайте USB-накопитель или загрузочный компакт-диск, если у вас есть запасной накопитель или система. Просто следуйте инструкциям в ubuntu . См. Правую сторону для получения информации конкретно о вашей ОС.