簡體   English   中英

在bash“Here Document”中存儲命令輸出

[英]Storing command output in bash “Here Document”

下面是一個小的bash腳本。 連接到服務器后的預期輸出是打印Hello World ,下一行是當前月份和年份 - 如Jan 2014Jan 2014 為了在'here document'中使用VARIABLE1 ,我需要擴展美元,因此不會引用終止字符~

VARIABLE1="World"
ssh username@server.domain.com <<~
        echo "Hello $VARIABLE1"
        COMMAND1=`date +%b`
        COMMAND2=$(date +%Y)
        echo "$COMMAND1 $COMMAND2"
~

我得到的實際輸出是這樣的:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Password:
Hello World

ssh以詳細模式運行時,這是輸出的最后一部分:

debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Trying private key: *****
debug1: Trying private key: *****
debug1: Next authentication method: keyboard-interactive
Password:
debug1: Authentication succeeded (keyboard-interactive).
debug1: Final hpn_buffer_size = *****
debug1: HPN Disabled: 0, HPN Buffer Size: *****
debug1: channel 0: new [client-session]
debug1: Enabled Dynamic Window Scaling

debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
Hello World

debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 1552, received 2360 bytes, in 0.1 seconds
Bytes per second: sent 17253.2, received 26235.6
debug1: Exit status 0

有人可以指出這里的錯誤嗎? 為什么不打印Jan 2014

有一些信息, 在這里了解如何強制TTY,但是,如果你正確地逃脫你的角色你的腳本應該工作:

VARIABLE1="World"
ssh username@server.domain.com <<EOF
        echo Hello $VARIABLE1
        COMMAND1=\`date +%b\`
        COMMAND2=\$(date +%Y)
        echo "\$COMMAND1 \$COMMAND2"
EOF

如果你想強制tty:

ssh -t -t user@domain.com <<EOF
        echo Hello $VARIABLE1
        COMMAND1=\`date +%b\`
        COMMAND2=\$(date +%Y)
        echo "\$COMMAND1 \$COMMAND2"
        exit
EOF

或者,您可以將腳本作為參數發送到ssh:

ssh user@domain.com "echo Hello $VARIABLE1;COMMAND1=\`date +%b\`; COMMAND2=\$(date +%Y); echo \$COMMAND1 \$COMMAND2"

編輯:如果要禁用有關偽終端分配的消息,請使用“-T”:

VARIABLE1="World"
ssh -T username@server.domain.com <<EOF
        echo Hello $VARIABLE1
        COMMAND1=\`date +%b\`
        COMMAND2=\$(date +%Y)
        echo "\$COMMAND1 \$COMMAND2"
EOF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM