コマンドは bash シェルでは機能しますが、エイリアスでは機能しません。

コマンドは bash シェルでは機能しますが、エイリアスでは機能しません。

次のコマンドを実行しています。

submit -n 72 -x '--mail-type=END -N2'

このコマンドは機能します。ただし、別名に設定すると、次のようになります。

alias foo='submit -n 72 -x '--mail-type=END -N2''

エラーにより失敗します。

bash: alias: -N2: not found

ただし、このエイリアスはうまく機能します。

alias foo='submit -n 72 -x '-N2''

そのため、--mail-type=END フラグメントに関する特定の事項が問題を引き起こします。

編集:alias = '...をalias foo = '...に変更しました。

ベストアンサー1

提案が終了しました。代わり""にto containを試してください''。 (望むかもしれないし望ましくないかもしれない""補間法を使用しても)$variables

alias="submit -n 72 -x '--mail-type=END -N2'"

または、'\''「現在の一重引用符の終了、リテラル引用符の挿入、現在の一重引用符の再起動」トリックを使用します。つまり、内部のすべてが'次に置き換えられます。'\''

alias='submit -n 72 -x '\''--mail-type=END -N2'\'''

引用符があなたのような2つの単語ではなく1つの完全な文字列を生成することを確認する方法は次のとおりです。

# not ok, two distinct words
$ perl -E 'say for @ARGV' 'submit -n 72 -x '--mail-type=END -N2''
submit -n 72 -x --mail-type=END
-N2

# ok, a single string
$ perl -E 'say for @ARGV' 'submit -n 72 -x '-N2''                
submit -n 72 -x -N2
$ 

# ok, single quotes within doubles
$ perl -E 'say for @ARGV' "submit -n 72 -x '--mail-type=END -N2'"
submit -n 72 -x '--mail-type=END -N2'

# ok, '\'' trick
$ perl -E 'say for @ARGV' 'submit -n 72 -x '\''--mail-type=END -N2'\'''
submit -n 72 -x '--mail-type=END -N2'
$ 

に関してはfoo='submit -n 72 -x '-N2''いいえUNIXのネストされた参照欲しくないネスト。これは、シェルが$(cmd ... $(cmd ...))逆引用符のみを使用してネストする方法を特定しようとしない理由です。foo='submit -n 72 -x '-N2''は、より長く複雑に表現するfoo='submit -n 72 -x '-N2か、より簡単に表現しますfoo='submit -n 72 -x -N2'

おすすめ記事