如何在文件的第一行添加 # Shebang,该文件是由另一个程序自动创建的脚本

如何在文件的第一行添加 # Shebang,该文件是由另一个程序自动创建的脚本

我正在寻找一种方法将 shebang 添加#!/bin/csh -f到我的文件的第一行,它实际上是由另一组程序创建的。

由于该脚本是自动创建的,当用户单击我的工具中的某些按钮时,它应该从 bash 运行。

我尝试使用 sed,但是没有作用。

sed ' 1 s/.*/\#!/bin/csh -f/' filename.

和 awk

awk 'NR==1{printf "%s %s\n", $0, "#!/bin/csh -f"}' filename

这两个命令都返回以下内容

/bin/csh is not an event.

请建议更好的方法。

答案1

!尝试使用\!而不是普通的 来转义字符,!应该会得到更好的结果。所以尝试:

sed '1 i\#\!\/bin\/csh -f' filename > out.txt

答案2

Awk 替代品

awk 'BEGIN{print "#!/bin/csh -f"} {print}' filename > out.sh

awk 'NR==1{print "#!/bin/csh -f"};{print}' filename > out.sh 

Xen2050 的变体修改内部文件而不是将其重定向到out.sh

 sed -i '1 i\#\!\/bin\/csh -f' filename

答案3

nano foo
#!/bin/bash

ctrl-o
enter
ctrl-x

这将创建一个名为 foo 的文件,编辑它,输入 shabang。保存文件并退出。

现在,每次您需要从命令行将 shabang 插入到新文件中时,只需在开始之前将文件名 cat 到新文件中即可。

touch foo2
cat foo > foo2

或者,您可以使用追加运算符,因为如果文件仍然为空:

cat foo >> foo2. 

出于某种原因你不能简单地:

echo "#!/bin/bash" > foo2

因为这将返回以下错误:

bash: !/bin/bash: event not found.

如果有人可以解释为什么这不起作用,或许可以将字符串回显到文件中,这样就可以避免需要为此目的专门创建文件,我将不胜感激。

相关内容