oneliner에서 she-bang을 사용하세요

oneliner에서 she-bang을 사용하세요

oneliner에서 she-bang을 사용할 수 있습니까?

이 스크립트를 다음에서 실행하려고 합니다.https://stackoverflow.com/questions/16928004/how-to-enter-ssh-password-using-bash, 하나의 라이너로.

파일에 넣고 ./file을 사용하여 실행하면 예상대로 작동하지만 어떻게 원라이너로 실행할 수 있나요?

이것은 아무런 문제 없이 스크립트로 작동합니다.

#!/usr/bin/expect -f
spawn ssh [email protected]
expect "assword:"
send "mypassword\r"
interact

oneliner에서 어떻게 실행할 수 있나요?

내가 달리려고 하면

spawn ssh [email protected]; expect "assword:"; send "mypassword\r"; interact

다음을 반환합니다.

bash: spawn: command not found

내가 달리려고 하면

#!/usr/bin/expect -f; spawn ssh [email protected]; expect "assword:"; send "mypassword\r"; interact

그러면 모든 것이 주석으로 처리되고 아무 일도 일어나지 않습니다.

편집하다:

답변에서 제안된 내용을 실행해 보세요.

expect -c `spawn ssh user@server "ls -lh /some/file"; expect "assword:"; send "mypassword\r"; interact`

돌아왔다

bash: spawn: command not found
couldn't read file "assword:": no such file or directory
bash: send: command not found
bash: interact: command not found
expect: option requires an argument -- c

실행 시간:

$ cat << 'EOF' | /usr/bin/expect -
> spawn ssh user@server "ls -lh file"
> expect "assword:"
> send "password\r"
> interact
> EOF

SSH를 통해 서버에 연결하는 것 같지만 명령을 실행하지 않거나 결과를 출력하지 않습니다.

다음을 반환합니다.

spawn ssh user@server ls -lh file
user@server password

스크립트에서 실행할 때:

./test
spawn ssh user@server ls -lh file
user@server's password:
-rw-rw-r-- 1 user user 467G Jan  2 00:46 /file

편집 2:

첫 번째 명령의 문제점은 작은따옴표 대신 백틱을 사용하는 것입니다. 다음 명령은 예상대로 작동합니다.

expect -c 'spawn ssh user@server "ls -lh file"; expect "assword:"; send "mypassword\r"; interact'

:

답변1

문장으로서 스크립트를 매개변수로 전달할 수 있습니다.expect -c

expect -c 'spawn ssh [email protected]; expect "assword:"; send "mypassword\r"; interact'

셸의 따옴표는 '...'및 이고 "...", 예상에 대한 해당 따옴표는 {...}"..."이므로 셸 변수 등을 전달하는 데 어느 정도 유연성이 있습니다.

그러나 이는 금방 읽을 수 없고 유지 관리할 수 없게 됩니다.

답변2

expect해당 스크립트는 표준 입력에서 읽을 수 있습니다.

cat << 'EOF' | /usr/bin/expect -
spawn ssh [email protected]
expect "assword:"
send "mypassword\r"
interact
EOF

관련 정보