エイリアスを使用して単一の回線で電話したいです。
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"; do sleep 30; done
'
脱出しようとしましたが\'
失敗しました。
上記の1行のコードをエイリアスに使用する正しい構文は何ですか?
答え1
alias my_du=$'while printf \'%s \' "$(df -P / | awk \'NR==2 { print $(NF-1) }\')"; do sleep 3; done'
次のコマンドを使用して結果を確認できます
alias my_du
あるいは、代わりに$()
参照されると、置き換えられ、意図したプログラム呼び出しの代わりに結果がエイリアス定義の一部になります。"
'
\
答え2
エイリアスとして導くことはできますが、通常は関数が好まれます。からman bash
:
ほとんどすべての目的で、エイリアスはシェル関数に置き換えられます。
機能的なエイリアス:
my_du() {
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"
do
sleep 30
done
}
これはより読みやすく、メンテナンスが容易です。
答え3
\
一重引用符のコンテキストでは文字通り使用されるため、一重引用符の中に一重引用符をエスケープすることはできません。エスケープする前に一重引用符を閉じるか、二重引用符を使用することをお勧めします。
alias my_du="while printf '%s ' \"\$(df -P / | awk 'NR==2 { print \$(NF-1) }')\"; do sleep 30; done"
答え4
コマンドがパラメーターを受け入れるようにするには、関数を使用して、どのような方法でもその環境と対話します。少なくともbashでは、エイリアスが定義されると拡張されます。可能パラメータを受け入れるか、変数を使用するのと同じです。時々。マーフィーの法則は、これが本当に必要なときに機能しないことを保証します。