Почему эти команды winepath не работают?

Я попробовал код из этого вопроса и по какой-то причине они не работают, почему и как их исправить?

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:~$ 
0
задан 13 April 2017 в 15:24

4 ответа

Я исправил первоначальный ответ (и на этот раз я проверил его):

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

Я забыл это! интерпретируется внутри " с. Я должен был использовать ' с. ! начинает матч замещения истории, и это было не то, чего я хотел.

0
ответ дан 13 April 2017 в 15:24

Это - что-то вроде окольного способа сделать вещи. Первое как создает файл и записи #!/bin/sh к нему второй добавляет что-то еще в файл.

  • Получить эту работу

    1. Создайте каталог bin в Вашем корневом каталоге, или в Наутилусе или путем ввода

      mkdir -p ~/bin
      
    2. Создайте новый файл ~/bin/run_linx_program (где ~ сокращение от "Вашего корневого каталога"), и поместите эти строки в него:

      #!/bin/bash
      $1 "`wine winepath -u "$2"`"
      

      Можно создать файл путем выполнения nano ~/bin/run_linx_program, или можно использовать Текстовый редактор.

    3. Выполненный chmod a+x ~/bin/run_linux_program для создания исполняемого файла файла альтернативно можно щелкнуть правой кнопкой по файлу, открыть свойства, перейдите к Полномочиям и установите 'исполняемый файл'.

0
ответ дан 13 April 2017 в 15:24

! имеет специальное значение в bash:

Когда используются средства расширения истории команд (см. ниже РАСШИРЕНИЕ ИСТОРИИ), символ расширения истории, как правило,!,
должен заключаться в кавычки: предотвратить расширение истории.

Существует два способа предотвращения расширения истории: либо экранирование ! с обратной косой чертой, либо использование одинарных кавычек:

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

Я заменил галочки на $( и ), чтобы сделать линию более четкой.

0
ответ дан 13 April 2017 в 15:24

Если вы на самом деле не используете или не нуждаетесь в расширении истории, я рекомендую просто отключить его, добавив строку

set +H

в ваш ~/.bashrc. Я сделал это и очень рад, что никогда больше не буду обеспокоен event not found сообщениями.

Несмотря на это, расширение истории включено только для интерактивных оболочек, поэтому оно не влияет на сценарии.

0
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: