Bash

SSH - 向終端覆蓋重定向列印輸入提示

  • February 9, 2021

我有兩個腳本:

  • 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 才能使其工作。另請注意,如果您這樣做,則不使用標準錯誤提示您打破了一個相當普遍的習慣。

引用自:https://unix.stackexchange.com/questions/525364