Bash
SSH - 向終端覆蓋重定向列印輸入提示
我有兩個腳本:
test_input.sh
是通過 SSH 執行的腳本。在這個腳本中,我要求使用者輸入一些東西。test_ssh_connection.sh
是一個連接localhost
並執行腳本的腳本test_input.sh
在
test_ssh_connection.sh
我想將輸出重定向test_input.sh
到文件中,但在test_input.sh
我想在螢幕上顯示輸入提示時,因為我希望能夠看到該提示。這是我的
test_ssh_connection.sh
:echo "Connecting to localhost and executing an input script." ssh "localhost" "sh test_input.sh" >> "test.txt"
這是
test_input.sh
:echo -n "Give me a value: " read value echo "You gave me [${value}]."
實際上,這是
test.txt
執行後的內容test_ssh_connection.sh
:Give me a value: You gave me [asd].
目前,提示
Give me a value:
僅在終端中test.txt
,不在終端中。相反,我想要的是在終端中顯示它,如果可能的話,我想將它從test.txt
.我找到了這個問題,但似乎如果通過 ssh 呼叫下標
>/dev/tty
/>$(tty)
不起作用。
出於這個原因,不屬於應用程序普通輸出的提示和其他互動式消息通常被寫入標準錯誤流。例如,將主要提示寫入 shell 的標準錯誤流。
當使用以下命令時,該
read
實用程序bash
將顯示標準錯誤提示-p
:#!/bin/bash read -r -p 'Give me a value: ' value printf 'You gave me [%s].\n' "$value"
和
/bin/sh
你一起做類似的事情#!/bin/sh printf 'Give me a value: ' >&2 read -r value printf 'You gave me [%s].\n' "$value"
重定向
>&2
會將輸出重定向printf
到標準錯誤。有關的:
您是否想直接寫信給 TTY,然後使用這兩種變體中的第二種,並使用
>/dev/tty
. 請注意,您必須使用ssh -t
分配一個偽 TTY 才能使其工作。另請注意,如果您這樣做,則不使用標準錯誤提示您打破了一個相當普遍的習慣。