cryptsetup
どのFDに転送されても、/dev/null
パスワードの入力を求められます。たとえば、次のプロンプトが表示され続けます。
cryptsetyp luksOpen /dev/sdXY name >/dev/null 2>/dev/null
標準リダイレクトを使用してファイルにリダイレクトできないというターミナルメッセージをどのように表示しますか?
stdoutを使用して親スクリプトに結果を返すので、bashスクリプトでこのような機能を取得したいと思います。しかし、まだインタラクティブなプロンプトを表示したいと思います。 bashを使ってこれを行うことはできますか?
ベストアンサー1
お試しいただくとstrace
、おそらく直接使用される様子をご覧いただけます/dev/tty
。
...
open("/dev/tty", O_RDWR) = 6
ioctl(6, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(6, "Enter passphrase for .......: ", 30) = 30
ioctl(6, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost isig icanon -echo ...}) = 0
...
ソースコードから(utils_crypt.c
):
static int interactive_pass(const char *prompt, char *pass, size_t maxlen,
long timeout)
{
[...]
/* Read and write to /dev/tty if available */
infd = open("/dev/tty", O_RDWR);
if (infd == -1) {
infd = STDIN_FILENO;
outfd = STDERR_FILENO;
} else
outfd = infd;
if (tcgetattr(infd, &orig))
goto out_err;
だから、/dev/tty
オンにしてテストし、動作すると使用します。失敗すると、通常のstdin、stdoutに戻り、プロンプトは再び表示されません。
は/dev/tty
プロセスの端末です。詳細についてはを参照してくださいman 4 tty
。