2013-07-26 73 views
1
[[email protected] ~]# printf "#!/bin/sh\nsomething" 
-bash: !/bin/sh\nsomething": event not found 

无法将命令作为命令执行,因为它不会保存到命令历史记录中。从shell或shellcript写入shell脚本?

我必须稍微混淆hashbang才能让我过去吗?

我尝试这样做:

[[email protected] ~]# printf "%s!/bin/sh\nsomething" # 
-bash: !/bin/sh\nsomething": event not found 

(也试过echo达到同样的效果)

回答

3

在交互shell,!用于历史替换。您可以\或通过将字符串中的单引号转义:

printf '#!/bin/sh\nsomething' 

见的bash History Expansion的文档。

如果您的实际应用程序将位于脚本中,这不会成为问题,因为脚本中默认情况下未启用历史记录。

export histchars= 
+0

哦废话。是否真的是导致问题的历史替代?那么,换行似乎用单引号,所以看起来不错。 –

0

好:

如果不用不完历史扩展,你可以禁用历史人物。这是一种变通方法,我发现:

[[email protected] ~]# printf "#%s/bin/sh\nsomething" ! 
#!/bin/sh 
something 

是的,必须是历史扩展是与它(错误提的event是一大线索)搞乱

注:我选择使用heredoc在我的脚本制作脚本中。转义字符串是地狱般的。