스크립트 파일의 시스템 오류 메시지를 음소거하고 내 오류 메시지를 표시합니다.

스크립트 파일의 시스템 오류 메시지를 음소거하고 내 오류 메시지를 표시합니다.

현재 작업 디렉토리의 접미사가 있는 모든 파일을 .sh지정된 디렉토리로 이동하는 간단한 스크립트를 만들었습니다.

이러한 파일이 없으면 스크립트는 시스템 오류 메시지가 아닌 내가 입력한 오류 메시지만 출력해야 합니다.mv: cannot stat ‘*.sh’: No such file or directory

./shm 2> /dev/nullput 명령 뒤에 추가하려고 했더니 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/nullmv 명령을 추가하여 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가 누락되면 각 파일이 하나로 이동되어 이전 파일을 덮어쓰게 됩니다.

파일이나 폴더 이름에 공백이 있으면 따옴표가 필요합니다.

관련 정보