현재 작업 디렉토리의 접미사가 있는 모든 파일을 .sh
지정된 디렉토리로 이동하는 간단한 스크립트를 만들었습니다.
이러한 파일이 없으면 스크립트는 시스템 오류 메시지가 아닌 내가 입력한 오류 메시지만 출력해야 합니다.mv: cannot stat ‘*.sh’: No such file or directory
./shm 2> /dev/null
put 명령 뒤에 추가하려고 했더니 mv
스크립트가 끝없이 실행되었습니다!
시스템 오류 메시지를 무음으로 만드는 방법은 무엇입니까?
#!/bin/bash
echo "Moving all script files to script directory..."
mv *.sh $HOME/linux/scripts
#./shm 2> /dev/null
if [ $? -ne 0 ]
then
echo "No files with .sh suffix"
fi
답변1
나는 이것이 오류 메시지를 제거하는 잘못된 방법이라고 생각합니다. 저 같은 경우에는 확인용으로 사용하는 것이 더 좋습니다.
#!/bin/bash
if ls *.sh &> /dev/null
then
echo "Moving all script files to script directory..."
mv -v -n *.sh $HOME/linux/scripts
else
echo "No files with .sh suffix -- nothing to move"
fi
답변2
아래 스크립트는 사용자 정의 오류 메시지를 표시하는 데 도움이 될 것입니다.
#!/bin/bash
files=$(ls *.sh 2> /dev/null)
if [ -z "$files" ]
then
echo "No script files found. Exiting.."
exit
fi
echo "Moving all script files to script directory..."
for file in $files
do
if ! mv $file $HOME/linux/scripts
then
echo "Unable to move file $file"
fi
done
"*.sh"
스크립트가 실행되면 스크립트의 현재 작업 디렉터리에 있는 파일 목록이 files
변수에 할당됩니다.
$files
다음으로 변수가 비어 있는지 확인하기 위해 온전성 검사를 수행합니다 . 비어 있으면 "*.sh"
디렉터리에 파일이 없다는 의미입니다.
파일이 존재하는 경우 for
루프는 $files
변수를 반복하여 각 파일을 이동합니다. 명령이 실패 하면 mv
오류가 인쇄됩니다.
for
루프에 대한 자세한 내용은 다음을 참조하세요.이 파일.
답변3
2>/dev/null
mv 명령을 추가하여 stderr을 /dev/null로 리디렉션합니다.
mv *.sh $HOME/linux/scripts 2>/dev/null
답변4
Costas 또는 Kannan에 관한 다른 솔루션: 이
if ! mv $file $HOME/linux/scripts
로 교체해야합니다
if ! mv "$file" "$HOME/linux/scripts/."
또한 스크립트 시작 부분에 이 줄을 추가하세요.
mkdir -p "$HOME/linux/scripts"
그렇지 않으면 linux/scripts가 누락되면 각 파일이 하나로 이동되어 이전 파일을 덮어쓰게 됩니다.
파일이나 폴더 이름에 공백이 있으면 따옴표가 필요합니다.