これまで私はシェル内のセミコロンは(どういうわけか)改行と同じ意味を持つと思っていました。だから、
alias <name>=<replacement text>; <name>
<name>
は不明ですが、次の行では既知です。、、、csh
およびは同じように動作します。少なくとも、エイリアスが直接使用されるか、スクリプトがセムコロンの前にソース化されるかは関係ありません。エイリアスはその後は不明ですが、次のコマンドラインでは既知です。これはバグですか、それとも意図された動作ですか?tcsh
sh
ksh
bash
csh
;
答え1
使用しているエイリアス構文は POSIX シェルには不適切です。POSIX シェルの場合は、以下を使用する必要があります。
alias name='replacement'
しかし、エイリアスの置換はパーサーの早い段階で行われるため、すべてのシェルではこれは機能しません。
エイリアス設定が実行される前に、行全体がパーサーによって読み取られるため、コマンド ラインは機能しません。
エイリアスが次のコマンド ラインに表示されれば、機能します。
答え2
答え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
を として定義できます。function
alias
$ 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