viエディタを使用してecho "!#/bin/bash"の出力を別のSHファイルにリダイレクトする方法

viエディタを使用してecho "!#/bin/bash"の出力を別のSHファイルにリダイレクトする方法

デフォルトでは、viエディタとechoコマンドを使用してSHファイル内に別のSHファイルを作成します。これは元のSHファイルの内容です -

#!/bin/bash
echo "#!/bin/bash" > f1.sh
echo "echo "hello"" > f1.sh

f1はechoコマンドを使用して書きたいSHファイルですが、元のファイルを実行するとf1ファイルは#!bin/bashに書き込まず、echo "hello"コマンドのみを書き込みます。 echo HASHBANG コマンドを echo \#\!/bin/bash で書いてみましたが、正常に動作しませんでした。それでは、viエディタでechoコマンドを使用して#!bin/bashを他のSHファイルに書き込む方法は?

答え1

代わりにこの記事を使用してください。

#!/bin/bash

cat >f1.sh <<'SCRIPT_END'
#!/bin/bash
echo "hello"
SCRIPT_END

これは、シェルが何も妨げることなく、そのままスクリプトを渡してファイルcatにリダイレクトしますf1.sh

コードには多くの問題がありますが、リダイレクトに関連する問題は、リダイレクトを使用するf1.shたびに>ファイルをトリミングまたは空にすることです。これはecho、コードの2番目のコードが、最初のコードがファイルに書き込んだデータを上書きすることを意味しますecho

また、2行目の引用はecho意味がありません。

Viエディタはこれには関係ありません。

関連情報