지금까지 나는 쉘의 세미콜론이 개행 문자와 같은 의미를 갖고 있다고 생각했습니다. 그래서 나는 놀랐다.
alias <name>=<replacement text>; <name>
<name>
알 수 없지만 다음 행은 알려져 있습니다. csh
, tcsh
, sh
, ksh
및 bash
동일하게 동작합니다. 최소한 csh
별칭을 직접 사용하거나 세미콜론 이전에 스크립트를 가져오는 것은 중요하지 않습니다. 별칭은 세미콜론 다음에는 알 수 없지만 ;
다음 명령줄에서는 알 수 있습니다. 이것은 버그입니까, 아니면 의도적인 동작입니까?
답변1
사용 중인 별칭 구문은 POSIX 셸에 적합하지 않습니다. POSIX 셸의 경우 다음을 사용해야 합니다.
alias name='replacement'
그러나 모든 쉘의 경우 별칭 교체가 파서 초기에 수행되므로 이는 작동하지 않습니다.
파서는 별칭 설정을 수행하기 전에 전체 줄을 읽으므로 명령줄이 작동하지 않습니다.
별칭이 다음 명령줄에 나타나면 작동할 것입니다.
답변2
답변3
당신이 정말로 원한다면한 줄, 그러면 할 수 있습니다별칭 대신 함수 사용.
예를 들어 py3
별칭을 생성했지만 이는 두 번째 줄에서만 유효합니다.
$ 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