Linux 从shell还是从shell脚本编写shell脚本?

Linux 从shell还是从shell脚本编写shell脚本?,linux,bash,shell,unix,Linux,Bash,Shell,Unix,它无法将命令作为命令执行,因为它不会保存到命令历史记录中 我必须稍微混淆一下hashbang才能让它通过吗 我试过这个: [root@centos ~]# printf "#!/bin/sh\nsomething" -bash: !/bin/sh\nsomething": event not found (也尝试了相同效果的回声)在交互式shell中,用于历史替换。您可以使用\或将字符串置于单引号中对其进行转义: [root@centos ~]# printf "%s!/bin/sh\nsom

它无法将命令作为命令执行,因为它不会保存到命令历史记录中

我必须稍微混淆一下hashbang才能让它通过吗

我试过这个:

[root@centos ~]# printf "#!/bin/sh\nsomething"
-bash: !/bin/sh\nsomething": event not found

(也尝试了相同效果的回声)

在交互式shell中,
用于历史替换。您可以使用
\
或将字符串置于单引号中对其进行转义:

[root@centos ~]# printf "%s!/bin/sh\nsomething" #
-bash: !/bin/sh\nsomething": event not found
请参阅bash的文档

如果您的实际应用程序在脚本中,这不会是一个问题,因为默认情况下脚本中不启用历史记录

如果您从未使用过历史扩展,可以通过以下方式禁用历史字符:

printf '#!/bin/sh\nsomething'

嗯。这是我发现的一个解决方法:

export histchars=
是的,一定是历史扩展弄乱了它(提到
事件的错误是一条重要线索)


注意:我选择在我的脚本制作脚本中使用heredoc。逃逸的弦是地狱般的。

哦,废话。这真的是历史替代造成的问题吗?嗯,这些新词似乎是用单引号引起来的,所以看起来不错。
[root@centos ~]# printf "#%s/bin/sh\nsomething" !
#!/bin/sh
something