从shell或shell脚本编写shell脚本?

时间:2013-07-26 03:32:49

标签: linux bash shell unix

[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

2 个答案:

答案 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。逃避字符串是地狱般的。