변수를 읽기 위해 별칭을 설정한 다음 두 번째 명령에서 이를 사용하는 것은 수동으로 실행하는 경우에만 작동합니다.

변수를 읽기 위해 별칭을 설정한 다음 두 번째 명령에서 이를 사용하는 것은 수동으로 실행하는 경우에만 작동합니다.

저는 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 jfpsI 를 사용하는 경우에는 echo $db두 번째 데이터베이스의 이름입니다.

왜?

답변1

"..."큰따옴표( )를 사용하므로 $db별칭을 사용할 때가 아니라 별칭을 정의할 때 변수가 확장됩니다. 이 시도:

alias psql-local='read -p "PSQL: enter the DB to connect: " db ; sudo -i -u postgres psql --dbname "$db"'

관련 정보