我正在寻找一种方法将 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.
如果有人可以解释为什么这不起作用,或许可以将字符串回显到文件中,这样就可以避免需要为此目的专门创建文件,我将不胜感激。