bash - 找不到命令

bash - 找不到命令

我有一个脚本

[pic@pic Desktop]$ cat skrypt.sh 
#!/bin/bash

awk '{sub(/#echo "Wstałem"/,"#echo \"Wstałem\""); print $0 > "skrypt.sh"}' skrypt.sh
awk '{sub(/awk/,"#awk"); print $0 > "skrypt.sh"}' skrypt.sh

[pic@pic Desktop]$

我运行脚本

[pic@pic Desktop]$ ./skrypt.sh 
./skrypt.sh: line 5: h: command not found
[pic@pic Desktop]$ 

为什么会收到消息?

./skrypt.sh: line 5: h: command not found

编辑:

运行脚本后我想得到结果

#!/bin/bash

#awk '{sub(/#echo "Wstałem"/,"#echo \"Wstałem\""); print $0 > "skrypt.sh"}' skrypt.sh
#awk '{sub(/awk/,"#awk"); print $0 > "skrypt.sh"}' skrypt.sh

这只是一个例子。这个想法是,在真正的脚本中,在调用之后已注释掉上面的行。

答案1

非常strace的行为。但背后是有逻辑的。

bash逐行读取脚本。第一条awk语句只是用相同的内容写入skrypt.sh新文件,因为没有任何内容可以替换。

第二条awk语句替换awk#awk(单一替换)。所以添加一个字符。然后bash读取文件的其余部分。偏移量位于该行的末尾(第二个awk语句,第 4 行)。但现在该行有点长(一个字符)。因此 bash 读取该行的其余部分,这是一个单一的h.这是作为命令进行线程化的(因为我们在bash脚本中并且它以换行符结尾)。当然h, 不是有效的命令,因此会出现错误消息。

要完成您想要的任务(除了您的脚本非常不稳定),请在第 4 行末尾添加一个字符,该字符不能解释为命令,例如空格 ( )。

最后但并非最不重要的:

您不得在脚本内部编辑脚本。

相关内容