为什么那些 winepath 命令不起作用?

为什么那些 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:~$ 

答案1

我已经修复了原来的答案(这次我已经测试过了):

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

我忘了 ! 在 s 内部进行解释"。我应该使用's。!启动历史替换匹配,但这并不是我想要的。

答案2

! 在 bash 中有特殊含义:

当使用命令历史扩展功能时(参见下面的“历史扩展”),历史扩展字符(通常为!)
必须用引号引起来,以防止历史扩展。

有两种方法可以防止历史记录扩展,要么通过使用!反斜杠进行转义,要么通过使用单引号:

a@ubuntu:~$ echo "#\!/bin/sh" > ~/bin/run_linux_program
a@ubuntu:~$ echo '#!/bin/sh' > ~/bin/run_linux_program

在复杂的构造中,尽量避免使用"(双引号)字符,而使用单个字符('):

echo "$1" '"$(wine winepath -u "'$2'")"' >> ~/bin/run_linux_program

我把反引号替换为$(和,)以使线条更清晰。

答案3

这是一种有点迂回的做法。第一种方法是创建一个文件并写入#!/bin/sh内容,第二种方法是将其他内容附加到文件中。

  • 为了实现这个功能

    1. bin在 Nautilus 中或通过键入以下命令在主目录中创建目录

      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以使文件可执行,或者您可以右键单击该文件,打开属性,转到权限并设置“可执行”。

答案4

除非你真的使用或需要历史扩展,否则我建议通过添加行来关闭它

set +H

在你的 中~/.bashrc。我已经这样做了,并且很高兴再也不会被event not found消息打扰了。

无论如何,历史记录扩展仅对交互式 shell 启用,因此不会影响脚本。

相关内容