Не знаю, почему вы используете tee
здесь. То, что я подозреваю, что происходит, ему потребуется ввод, поэтому жду его, а затем труб 3 на стандартный вывод
-p prompt
Display prompt, without a trailing newline, before attempting
to read any input. The prompt is displayed only if input is coming from a
terminal.
Однако вход не отправляются с TTY здесь так проворным никогда не печатаются. Мне все еще кажется очень странным использовать tee
, но вы можете просто использовать echo -n
вместо -p
flag for read
и он должен работать.
#!/bin/sh
echo "start"
echo -n "input value: "
read val
echo $val
echo "finish"
e.g.
> tee file.log | ./abovescript
start
input value: 3
3
finish
> cat file.log
3
Также не уверен, как получить тройник, чтобы корректно завершить из-скрипта в здесь, так что вам нужно нажать клавишу возврата в конце, который, конечно, вызывает символ новой строки.
Тем не менее, так как это дополнительная линия в любом случае каждый раз, кажется, хуже, чем просто делать echo "$val" >> file.log
каждый раз, хотя лучшим вариантом было бы просто использовать функцию
#!/bin/bash
r() {
read -p "input value: " val
echo "$val" >> file.log
echo "$val"
}
echo "start"
val=$(r)
echo "$val"
echo "finish"
вы ищете 'script' ? 'script file.log; ./script.sh; exit' – ray
В вашем вопросе говорится, что вы хотите сохранить ввод пользователя. 'stderr' выводится, а не вводится. – Barmar
нет, мне нужно регистрировать вход пользователя, поэтому файл результатов моего примера должен содержать только 3. –