![변수를 읽기 위해 별칭을 설정한 다음 두 번째 명령에서 이를 사용하는 것은 수동으로 실행하는 경우에만 작동합니다.](https://linux55.com/image/147324/%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%9D%BD%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%EB%B3%84%EC%B9%AD%EC%9D%84%20%EC%84%A4%EC%A0%95%ED%95%9C%20%EB%8B%A4%EC%9D%8C%20%EB%91%90%20%EB%B2%88%EC%A7%B8%20%EB%AA%85%EB%A0%B9%EC%97%90%EC%84%9C%20%EC%9D%B4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EA%B2%83%EC%9D%80%20%EC%88%98%EB%8F%99%EC%9C%BC%EB%A1%9C%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EA%B2%BD%EC%9A%B0%EC%97%90%EB%A7%8C%20%EC%9E%91%EB%8F%99%ED%95%A9%EB%8B%88%EB%8B%A4..png)
저는 CentOS 7을 사용하고 있으며 PostgreSQL 셸(psql)을 시작하기 위해 별칭을 바인딩하고 싶습니다. 이 별칭을 정의하고 다음에 연결했습니다 /etc/profile.d/alias
.
alias psql-local="read -p \"PSQL: enter the DB to connect: \" db ; sudo -i -u postgres psql --dbname $db"
를 통해 구현할 수 있습니다 root
.
또한 as로 로그인한 root
다음 실행하면 다음과 같은 결과 alias
가 나타납니다.
alias psql-local='read -p "PSQL: enter the DB to connect: " db ; sudo -i -u postgres psql --dbname '
$db
마지막에는 비어 있습니다 .
그런 다음 실행 psql-local
하지만 오류가 발생합니다.
[root@lucas_vm ~]
> psql-local
PSQL: enter the DB to connect: jfps
psql: option '--dbname' requires an argument
Try "psql --help" for more information.
그런 다음 에 입력 /etc/profile.d/
하고 alias.sh
수동으로 실행했는데 갑자기 다음 별칭을 사용할 수 있었습니다.
[root@lucas_vm /etc/profile.d]
> . alias.sh
[root@lucas_vm /etc/profile.d]
> psql-local
PSQL: enter the DB to connect: jfps
psql (10.5)
Type "help" for help.
jfps=#
종료 psql
하고 다시 실행 하면 alias
다음 줄이 변경된 것을 볼 수 있습니다.
alias psql-local='read -p "PSQL: enter the DB to connect: " db ; sudo -i -u postgres psql --dbname jfps'
메모가 $db
로 변경되었습니다 jfps
.
그런 다음 다른 데이터베이스에 액세스하려고 시도하면 다시 작동합니다.
그러나 종료하면 두 번째 데이터베이스의 이름 대신 alias
해당 내용이 표시됩니다 . --dbname jfps
I 를 사용하는 경우에는 echo $db
두 번째 데이터베이스의 이름입니다.
왜?
답변1
"..."
큰따옴표( )를 사용하므로 $db
별칭을 사용할 때가 아니라 별칭을 정의할 때 변수가 확장됩니다. 이 시도:
alias psql-local='read -p "PSQL: enter the DB to connect: " db ; sudo -i -u postgres psql --dbname "$db"'