मेरे शेल बैश स्क्रिप्ट को डिफ़ॉल्ट रूप से बदलना $ PWD यह (स्क्रिप्ट का) वर्तमान स्थान है


1

अरे मैं अपनी शेल स्क्रिप्ट चला रहा हूं जो फ़ोल्डर्स और फाइलों के साथ इंटरैक्ट करता है, लेकिन मेरी $ PWD कि यह / home / MyUserName डायरेक्टरी की ओर इशारा करती रहती है और यह गड़बड़ करती है कि इसे क्या करना चाहिए। मैं लिनक्स 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-एन 0 ']'
  • sudo su [sudo] पासवर्ड के लिए MyUserName: ++ पिंग -c 1 74.125.21.14 ++ ++ -l
  • टेस्ट = 6
  • '[' 6 -गेट 5 ']'
  • sudo dnf स्थापित gcc कर्नेल-डेवेल बिनुटिल्स cpp glibc-devel glibc-headers isl कर्नेल कर्नेल-हेडर्स libmpc [sudo] dcarr के लिए पासवर्ड:
  • गूंज 'अपने लैपटॉप' s वायरलेस कार्ड की स्थापना शुरू। ' अपने लैपटॉप के वायरलेस कार्ड का सेटअप शुरू करना।
  • '[' -d//yywearCard ']'
  • mkdir ./MyWirelessCard
  • FILE =।
  • uname1 = ''
  • '[' '= 1000' ']' '
  • '' '' -r -w -x ./yyylessless_ard/fedora23_broadcom_wl_install.sh '' ''
  • गूंज 'प्रारंभिक प्रणाली अद्यतन को सुधारना।' प्रारंभिक सिस्टम अपडेट को सुधारना।
  • dnf -y update एरर: इस कमांड को रूट यूजर के तहत चलाया जाना है।
  • इको स्क्रिप्ट समाप्त हो गई है स्क्रिप्ट समाप्त हो गई है
  • बाहर जाएं

मैं एक नुकसान में हूँ किसी भी मदद की बहुत सराहना की जाएगी।


जब तक मुझे कुछ याद नहीं आ रहा है, sudo suसामान बेकार है। यह शायद वैसे भी अच्छा अभ्यास नहीं है, यह रूट और निकास के रूप में नहीं चलने के बारे में शिकायत करने के लिए पर्याप्त है। / संपादित करें: आह, आप प्रमाणीकरण कैशिंग पर भरोसा कर रहे हैं। यह और भी बुरा है। : डी
डैनियल बी


आपका उद्धरण कई स्थानों पर गलत है। उदाहरण के लिए [ " -r -w -x $FILE " ]होना चाहिए [ -r "$FILE" ] && [ -w "$FILE" ] && [ -x "$FILE" ] - आपका कोड कभी भी "गलत" नहीं होगा
ग्लेन जैकमैन

यदि आपको वह निर्देशिका बनानी है, तो $ FILE निश्चित रूप से मौजूद नहीं होगी।
ग्लेन जैकमैन

दिलचस्प है, लेकिन सिर्फ जिज्ञासा से बाहर, क्या अंतर है? यह मेरे लिए काम है, कम से कम जहाँ तक मुझे पता है
Purpe_Fedora

जवाबों:


3

आपको वास्तव में अपनी स्क्रिप्ट में निर्देशिकाओं को बदलना होगा। आमतौर पर:

cd "$(dirname "$0")"

मैंने कहीं पढ़ा है कि आप इसका उपयोग नहीं कर सकते हैं यदि इसमें फ़ाइल शामिल है, या वह किसी अन्य कमांड के बारे में है?
Purpe_Fedora

2
मैं आपके सवाल को नहीं समझता।
ग्लेन जैकमैन

जब मैं $ PWD का उपयोग करता हूं, तो यह मेरे उपयोगकर्ता फ़ोल्डर को दिखाता है, स्क्रिप्ट फ़ोल्डर को नहीं।
Purpe_Fedora

स्क्रिप्ट फ़ोल्डर है dirname "$0"। आपके द्वारा सीडी के बाद, $ PWD का वांछित मूल्य होगा।
ग्लेन जैकमैन

धन्यवाद यह मेरे लिए थोड़ा सा एक साथ peices डाल दिया, और संबंधित पढ़ने में मदद करने के लिए जोड़ दिया है कि मेरे शेष बालों के पिछले कुछ बचा लेता है! :)
Purpe_Fedora
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.