我尝试了代码这个问题并且由于某种原因它们不工作,为什么以及如何修复它们?
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
内容,第二种方法是将其他内容附加到文件中。
为了实现这个功能
bin
在 Nautilus 中或通过键入以下命令在主目录中创建目录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
以使文件可执行,或者您可以右键单击该文件,打开属性,转到权限并设置“可执行”。
答案4
除非你真的使用或需要历史扩展,否则我建议通过添加行来关闭它
set +H
在你的 中~/.bashrc
。我已经这样做了,并且很高兴再也不会被event not found
消息打扰了。
无论如何,历史记录扩展仅对交互式 shell 启用,因此不会影响脚本。