短い答え:何もしていないときは、別名の代わりに関数を使用し、ではなくecho
の代わりに関数を使用してください。
長い答え:すぐに問題は、引用符がネストしないことです。一重引用符を含むエイリアスの周囲に一重引用符を使用しようとしていますが、それは動作しません。シェルは、一重引用符で囲まれたセグメント'touch index.php; echo "<?php \n\n require_once __DIR__ . $ '
を含むものとしてシェルを解析しており、続けて引用符で囲まれていないセグメント/vendor/autoload.php
が続き、一重引用符のセグメント' ?>;" >> index.php; open/Applications/TextWrangler.app index.php;'
が続き、引用符が削除され、それらをまとめてエイリアスとして割り当てます。
これを修正する方法はありますが、醜いです。 alias sp='touch ... $ '"'"'/vendor/...
のようなもの - ここでは、最初の一重引用符が一重引用符で囲まれたセグメントを終了し、次に一重引用符を含む二重引用符セグメントがあり、次に一重引用符セグメントの先頭になります。ブリー。
本当に、エイリアスを定義すると複雑になりますが、関数に切り替える方がよいでしょう。彼らは引用符で囲む必要はありませんので、この全体の問題は議論の余地がある。とりわけ:
sp() {
touch index.php
echo "<?php \n\n require_once __DIR__ . $ '/vendor/autoload.php' ?>;" >> index.php
open/Applications/TextWrangler.app index.php
}
しかし限り、私は提案を作ってるんだと、私は他の変更のカップルを作ると思います。まず、touch
コマンドは、リダイレクトが何もしないことを何もしていないので、私はそれを残しておきます。第二に、\n
とecho
を使用することは予測できません。 echo
のいくつかのバージョンはそれを改行に変換しますが、そうでないものもあります。これはOS Xの異なるバージョン間で実際に変更されています。printf
を使用する方がはるかに優れていますが、正しく使用するのはさらに複雑です。 printf
の最初の引数は、残りの引数の表示方法を制御するための書式文字列です。 echo
とのもう1つの大きな違いは、最後に改行が自動的に追加されるわけではないということです。私はあなたがindex.phpファイルにこれを配置すると仮定しています:
<?php
require_once __DIR__ . $ '/vendor/autoload.php'
?>
printf
でこれを行うには、いくつかの方法があります。
printf '%s\n' "<?php" "" "require_once __DIR__ . \$ '/vendor/autoload.php'" "" "?>"
をしかし、この場合、私はここで、文書でcat
を使用したい:おそらく最も簡単なのは、各ラインの引数行い、各1の後に改行を入れてフォーマット文字列を使用することです。あなたはクリーナーインデントをしたい場合は、あなたも<<-"EOF"
を使用することができます
sp() {
cat <<"EOF" >>index.html
<?php
require_once __DIR__ . $ '/vendor/autoload.php'
?>
EOF
open/Applications/TextWrangler.app index.php
}
、その後、タブとヒアドキュメントのコンテンツ(ないスペース)をインデント:あなたは(別名とは異なり)関数の中でそれを行うことができます。
偉大な答え!すべての情報を非常に感謝します。 –