新しいエイリアスは 以降は利用できません。

新しいエイリアスは 以降は利用できません。

これまで私はシェル内のセミコロンは(どういうわけか)改行と同じ意味を持つと思っていました。だから、

alias <name>=<replacement text>; <name>

<name>は不明ですが、次の行では既知です。、、、cshおよびは同じように動作します。少なくとも、エイリアスが直接使用されるか、スクリプトがセムコロンの前にソース化されるかは関係ありません。エイリアスはその後は不明ですが、次のコマンドラインでは既知です。これはバグですか、それとも意図された動作ですか?tcshshkshbashcsh;

答え1

使用しているエイリアス構文は POSIX シェルには不適切です。POSIX シェルの場合は、以下を使用する必要があります。

alias name='replacement'

しかし、エイリアスの置換はパーサーの早い段階で行われるため、すべてのシェルではこれは機能しません。

エイリアス設定が実行される前に、行全体がパーサーによって読み取られるため、コマンド ラインは機能しません。

エイリアスが次のコマンド ラインに表示されれば、機能します。

答え2

この動作はPOSIXによって意図され、規定されている。エイリアスの置換

シェルの実行直後にエイリアスが置換されましたトークン認識そして、文法規則適用されました。エイリアスを呼び出したときには<name>、コマンドはalias実行されませんでした。

答え3

本当に望むなら一発ギャグ、そうすればエイリアスの代わりに関数を使用する

たとえば、py3エイリアスを作成しますが、2 行目でのみ機能します。

$ alias py3=python3; py3 -c 'print("hello, world")'

Command 'py3' not found, did you mean:

  command 'py' from deb pythonpy
  command 'hy3' from deb python3-hy
  command 'pyp' from deb pyp

Try: sudo apt install <deb name>

$ py3 -c 'print("hello, world")'
hello, world

の代わりにpy3を として定義できます。functionalias

$ function py3() { python3 "$@"; }; py3 -c 'print("hello, world")'
hello, world

または、export -f後で子プロセスで使用される前に:

$ function py3() { python3 "$@"; }; export -f py3; bash -c "py3 -c 'print("'"hello, world"'")'"
hello, world

そして、もしあなたが変数とエイリアス/関数、その後は変数あまりにも:

$ py3='python3'; $py3 -c 'print("hello, world")'
hello, world

必要ありませんexport -f:

$ py3='python3'; bash -c "$py3 -c 'print("'"hello, world"'")'"
hello, world

関連情報