1#!/bin/sh 2# Make sure that 'mv file unwritable-file' prompts the user 3# and that 'mv -f file unwritable-file' doesn't. 4 5# Copyright (C) 2001-2023 Free Software Foundation, Inc. 6 7# This program is free software: you can redistribute it and/or modify 8# it under the terms of the GNU General Public License as published by 9# the Free Software Foundation, either version 3 of the License, or 10# (at your option) any later version. 11 12# This program is distributed in the hope that it will be useful, 13# but WITHOUT ANY WARRANTY; without even the implied warranty of 14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15# GNU General Public License for more details. 16 17# You should have received a copy of the GNU General Public License 18# along with this program. If not, see <https://www.gnu.org/licenses/>. 19 20. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src 21print_ver_ mv 22require_controlling_input_terminal_ 23skip_if_root_ 24trap '' TTIN # Ignore SIGTTIN 25 26uname -s | grep 'BSD$' && skip_ 'known spurious failure on *BSD' 27 28touch f g h i || framework_failure_ 29chmod 0 g i || framework_failure_ 30 31 32ls /dev/stdin >/dev/null 2>&1 \ 33 || skip_ 'there is no /dev/stdin file' 34 35# work around a dash bug when redirecting 36# from symlinked ttys in the background 37tty=$(readlink -f /dev/stdin) 38 39test -r "$tty" 2>&1 \ 40 || skip_ '/dev/stdin is not readable' 41 42# Terminate any background processes 43cleanup_() { kill $pid 2>/dev/null && wait $pid; } 44 45mv f g < $tty > out 2>&1 & pid=$! 46 47# Test for the expected prompt; sleep upon non-match. 48check_overwrite_prompt() 49{ 50 local delay="$1" 51 case "$(cat out)" in 52 "mv: replace 'g', overriding mode 0000"*) ;; 53 *) sleep $delay; return 1;; 54 esac 55} 56 57# Wait for up to 12.7 seconds for the expected prompt. 58retry_delay_ check_overwrite_prompt .1 7 || { fail=1; cat out; } 59 60cleanup_ 61 62mv -f h i > out 2>&1 || fail=1 63test -f i || fail=1 64test -f h && fail=1 65 66# Make sure there was no prompt. 67case "$(cat out)" in 68 '') ;; 69 *) fail=1 ;; 70esac 71 72Exit $fail 73