cat
3行(開始者、内容、区切り文字)の自然な構文ではなく、1行でheredocumentを実行したいと思います。リダイレクトされたコンテンツは手動テキストファイルの一部になるように意図されており、その特定のファイルにできるだけ多くの行を保存したいので、これを行う必要があるのは主に審美的な側面です。
これによりcat <<< TEST > ~/myRep/tiesto tiesto TEST
(通常は3つの部分に分けられます)、エラーが発生します。
tiesto: そのファイルやディレクトリはありません
テスト:対応するファイルまたはディレクトリはありません。
Bashで1行のドキュメントを実行できますか?
答え1
はい、しかしあなたはここにある文字列一つではなくここのドキュメント:
cat >"$HOME/myRep/tiesto" <<<'tiesto'
これは文字列をtiesto
標準入力に送信し、cat
標準出力のリダイレクトを介して文字列をファイルに書き込みます。$HOME/myRep/tiesto
here-stringsは標準ではありませんが、少なくとも実装されましたzsh
。 、、、、そして。rc
rc
es
akanga
ksh93
bash
mksh
yash
答え2
以下を使用して、ここで(ここにある文字列の代わりに)文書を1行に配置できます。
eval $'cat << TEST > ~/myRep/tiesto\ntiesto\nTEST'
技術的には、これは1行のコードですが、$'...'
再利用できる新しい3行のコードに拡張されますeval
。
を使用すると、eval
いつでも1行にすべてのシェルコードを配置できます。
サポートされていないシェルの場合は、$'...'
次のことができます。
eval "$(printf 'NL="\n"')"; eval "cat << TEST > ~/myRep/tiesto${NL}tiesto${NL}TEST"
または
eval "$(printf 'cat << TEST > ~/myRep/tiesto\ntiesto\nTEST')"
もちろんここでは
echo tiesto > ~/myRep/tiesto
はるかに簡単になります。または複数行の場合:
printf '%s\n' "line 1" "line 2" > ~/myRep/tiesto