내 쉘 bash 스크립트 기본값 $PWD를 스크립트의 현재 위치로 변경합니다.

내 쉘 bash 스크립트 기본값 $PWD를 스크립트의 현재 위치로 변경합니다.

안녕하세요, 폴더 및 파일과 상호 작용하는 셸 스크립트를 실행 중인데 $PWD가 계속 /home/MyUserName 디렉터리를 가리키고 있어 예상되는 작업이 엉망이 되었습니다. 저는 Linux 4.4.8-300.fc23.x86_64 GNU/Linux를 실행하고 있습니다:

#!/usr/bin/bash -x

clear
ls $PWD

#Check Root
echo checking Root user
if [ $EUID -ne 0 ]
then
    sudo su
fi;

#Check internet availablity
TEST=$(ping -c 1 74.125.21.14|wc -l)
if [ $TEST -gt 5 2>&1 ]
then
    sudo dnf install gcc kernel-devel binutils cpp glibc-devel glibc-headers isl kernel kernel-headers libmpc
else
    echo "No Internet Connection Available! Installing RPMs manuely."
    arr=(*.rpm)
    for (( i=0; i<${#arr[@]}; i++ ));
    do
        echo " ${arr[$i]} "
        dnf -y install ${arr[$i]}
    done
fi;

# Get Network Ability

echo "Starting the setup of your laptop's wireless card."
if [ -d ./MyWirelessCard ]
then
    FILE=./MyWirelessCard/fedora23_broadcom_wl_install.sh
    uname1=" $( stat -c "%u" $FILE ) "
    [ " $USERNAME1 = 1000" ] || chown 1000 $FILE
    [ " -r -w -x $FILE " ] || chmod +rwx $FILE
else
    mkdir ./MyWirelessCard
    FILE=./MyWirelessCard/fedora23_broadcom_wl_install.sh
    uname1=" $( stat -c "%u" $FILE ) "
    [ " $USERNAME1 = 1000" ] || chown 1000 $FILE
    [ " -r -w -x $FILE " ] || chmod +rwx $FILE
fi;

#Making wireless card installer run on boot
#echo "Making the wireless card install script run on boot"
#ln -s ./MyWirelessCard/fedora23_broadcom_wl_update.sh /etc/init.d/
#ln -s ./MyWirelessCard/fedora23_broadcom_wl_update.sh /etc/rc.d/

# Initial Update

echo "Preforming initial system update."
dnf -y update

#Exit

echo Script is finished
exit

나는 얻다:

  • ls /home/MyUserName 폴더 내용
  • 에코 확인 루트 사용자 확인 루트 사용자
  • '[' 1000 -ne 0 ']'
  • sudo su [sudo] MyUserName의 비밀번호: ++ ping -c 1 74.125.21.14 ++ wc -l
  • 테스트=6
  • '[' 6 -gt 5 ']'
  • sudo dnf 설치 gcc kernel-devel binutils cpp glibc-devel glibc-headers isl 커널 커널 헤더 libmpc [sudo] dcarr의 비밀번호:
  • echo '노트북'\'의 무선 카드 설정을 시작합니다.' 노트북의 무선 카드 설정을 시작합니다.
  • '[' -d ./MyWirelessCard ']'
  • mkdir ./MyWirelessCard
  • FILE=./MyWirelessCard/fedora23_broadcom_wl_install.sh ++ stat -c %u ./MyWirelessCard/fedora23_broadcom_wl_install.sh stat: './MyWirelessCard/fedora23_broadcom_wl_install.sh'를 stat할 수 없습니다. 해당 파일이나 디렉터리가 없습니다.
  • uname1=' '
  • '[' ' = 1000' ']'
  • '[' ' -r -w -x ./MyWirelessCard/fedora23_broadcom_wl_install.sh ' ']'
  • echo '초기 시스템 업데이트를 진행 중입니다.' 초기 시스템 업데이트를 수행하는 중입니다.
  • dnf -y 업데이트 오류: 이 명령은 루트 사용자로 실행해야 합니다.
  • echo 스크립트가 종료되었습니다 스크립트가 종료되었습니다
  • 출구

나는 어떤 도움이라도 대단히 감사하겠습니다.

답변1

실제로 스크립트에서 디렉터리를 변경해야 합니다. 일반적으로:

cd "$(dirname "$0")"

관련 정보