Я попробовал код из этого вопроса и по какой-то причине они не работают, почему и как их исправить?
a@ubuntu:~$ echo "#!/bin/sh" > ~/bin/run_linx_program
bash: !/bin/sh": event not found
a@ubuntu:~$ echo "$1 "\`wine winepath -u \"$2\"\`\"" >> ~/bin/run_linx_program
> ?
> ^C
a@ubuntu:~$
Я исправил первоначальный ответ (и на этот раз я проверил его):
mkdir -p ~/bin/
echo '#!/bin/sh' > ~/bin/run_linx_program
echo '$1 "`wine winepath -u "$2"`"' >> ~/bin/run_linx_program
chmod a+x ~/bin/run_linx_program
Я забыл это! интерпретируется внутри "
с. Я должен был использовать '
с. !
начинает матч замещения истории, и это было не то, чего я хотел.
Это - что-то вроде окольного способа сделать вещи. Первое как создает файл и записи #!/bin/sh
к нему второй добавляет что-то еще в файл.
Получить эту работу
Создайте каталог bin
в Вашем корневом каталоге, или в Наутилусе или путем ввода
mkdir -p ~/bin
Создайте новый файл ~/bin/run_linx_program
(где ~
сокращение от "Вашего корневого каталога"), и поместите эти строки в него:
#!/bin/bash
$1 "`wine winepath -u "$2"`"
Можно создать файл путем выполнения nano ~/bin/run_linx_program
, или можно использовать Текстовый редактор.
Выполненный chmod a+x ~/bin/run_linux_program
для создания исполняемого файла файла альтернативно можно щелкнуть правой кнопкой по файлу, открыть свойства, перейдите к Полномочиям и установите 'исполняемый файл'.
! имеет специальное значение в bash:
Когда используются средства расширения истории команд (см. ниже РАСШИРЕНИЕ ИСТОРИИ), символ расширения истории, как правило,!,
blockquote>
должен заключаться в кавычки: предотвратить расширение истории.Существует два способа предотвращения расширения истории: либо экранирование
!
с обратной косой чертой, либо использование одинарных кавычек:a@ubuntu:~$ echo "#\!/bin/sh" > ~/bin/run_linux_program a@ubuntu:~$ echo '#!/bin/sh' > ~/bin/run_linux_program
В сложных конструкциях старайтесь избегать
"
(двойная кавычка) char и вместо этого используйте единственный ('
):echo "$1" '"$(wine winepath -u "'$2'")"' >> ~/bin/run_linux_program
Я заменил галочки на
$(
и)
, чтобы сделать линию более четкой.
Если вы на самом деле не используете или не нуждаетесь в расширении истории, я рекомендую просто отключить его, добавив строку
set +H
в ваш ~/.bashrc
. Я сделал это и очень рад, что никогда больше не буду обеспокоен event not found
сообщениями.
Несмотря на это, расширение истории включено только для интерактивных оболочек, поэтому оно не влияет на сценарии.