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

とても奇妙な行動です。しかし、その後には論理があります。

bashスクリプトを1行ずつ読んでください。最初のステートメントは置き換える内容がないため、awk同じ内容で新しいファイルを作成します。skrypt.sh

2番目のステートメントは(単一置換)でawk置き換えられます。だからawk#awk次へ追加キャラクター。次に、bashファイルの残りの部分を読んでください。オフセットは行末(2番目のawkステートメント、4行)にあります。ところで今は行が少し長くなりました(一文字)。したがって、bashは単一行の残りの行を読み取りますh。これはコマンドでスレッド化されます(なぜなら、私たちはスクリプトbashにあり、改行で終わるからです)。もちろん、これはh有効なコマンドではないため、エラーメッセージが表示されます。

目的を達成するには(スクリプトが非常に不安定な場合を除き)、コマンドで解釈できない文字(スペース()など)を4行目の末尾に追加します。

最後に重要なのは:

スクリプト内のスクリプトは編集できません。

おすすめ記事