[root@centos ~]# printf "#!/bin/sh\nsomething"
-bash: !/bin/sh\nsomething": event not found
它无法将命令作为命令执行,因为它不会保存到命令历史记录中。
我是否必须稍微混淆hashbang才能让它过去?
我试过了:
[root@centos ~]# printf "%s!/bin/sh\nsomething" #
-bash: !/bin/sh\nsomething": event not found
(同样尝试了echo
)
答案 0 :(得分:3)
在交互式shell中,!
用于历史记录替换。您可以使用\
或将字符串放在单引号中来转义它:
printf '#!/bin/sh\nsomething'
请参阅bash History Expansion的文档。
如果您的实际应用程序将在脚本中,则不会出现问题,因为默认情况下脚本中未启用历史记录。
如果您不使用历史记录扩展,则可以使用以下命令禁用历史记录字符:
export histchars=
答案 1 :(得分:0)
好。这是我找到的解决方法:
[root@centos ~]# printf "#%s/bin/sh\nsomething" !
#!/bin/sh
something
是的,必须是破坏它的历史扩展(提及event
的错误是一个很大的线索)
注意:我选择在我的脚本制作脚本中使用heredoc。逃避字符串是地狱般的。