![如何在文件的第一行添加 # Shebang,该文件是由另一个程序自动创建的脚本](https://linux22.com/image/1471271/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%96%87%E4%BB%B6%E7%9A%84%E7%AC%AC%E4%B8%80%E8%A1%8C%E6%B7%BB%E5%8A%A0%20%23%20Shebang%EF%BC%8C%E8%AF%A5%E6%96%87%E4%BB%B6%E6%98%AF%E7%94%B1%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%A8%8B%E5%BA%8F%E8%87%AA%E5%8A%A8%E5%88%9B%E5%BB%BA%E7%9A%84%E8%84%9A%E6%9C%AC.png)
我正在寻找一种方法将 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.
如果有人可以解释为什么这不起作用,或许可以将字符串回显到文件中,这样就可以避免需要为此目的专门创建文件,我将不胜感激。