Изменение моего сценария оболочки bash по умолчанию $ PWD на его текущее местоположение (сценария)

733
Purpe_Fedora

Привет, я запускаю свой скрипт оболочки, который взаимодействует с папками и файлами, но мой $ 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 " $ " dnf -y install $ 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 Содержимое папки
  • проверка эха Проверка пользователя Root Проверка пользователя Root
  • '[' 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: невозможно stat './MyWirelessCard/fedora23_broadcom_wl_install.sh': нет такого файла или каталога
  • uname1 = ''
  • '[' '= 1000' ']'
  • '[' '-r -w -x ./MyWirelessCard/fedora23_broadcom_wl_install.sh' ']'
  • echo 'Предварительное формирование исходного обновления системы.' Предварительное предварительное обновление системы.
  • Ошибка обновления dnf -y: эта команда должна выполняться от имени пользователя root.
  • эхо сценарий завершен сценарий завершен
  • выход

Я в растерянности, любая помощь будет принята с благодарностью.

1
Если я что-то упустил, то что-то вроде sudo бессмысленно. В любом случае, это, вероятно, не очень хорошая практика, достаточно пожаловаться на то, что он не работает от имени пользователя root и завершает работу. / edit: Ах, вы полагаетесь на кэширование аутентификации. Это еще хуже. : D Daniel B 8 лет назад 0
[Связанное чтение] (http://stackoverflow.com/q/59895/1025421) Daniel B 8 лет назад 0
Ваше цитирование неверно во многих местах. Например, `[" -r -w -x $ FILE "]` должно быть `[-r" $ FILE "] && [-w" $ FILE "] && [-x" $ FILE "]` - ваш код никогда не будет "ложным" glenn jackman 8 лет назад 0
Если вам нужно создать этот каталог, то $ FILE определенно не будет существовать. glenn jackman 8 лет назад 0
Интересно, но просто из любопытства, какая разница? Это делает свою работу для меня, по крайней мере, насколько я знаю Purpe_Fedora 8 лет назад 0

1 ответ на вопрос

3
glenn jackman

You'd have to actually change directories in your script. Typically:

cd "$(dirname "$0")" 
Я где-то читал, что вы не можете использовать это, если он содержит файл, или это о другой команде? Purpe_Fedora 8 лет назад 0
Я не понимаю ваш вопрос. glenn jackman 8 лет назад 2
Когда я использую $ PWD, он показывает мою папку пользователя, а не папку скрипта. Purpe_Fedora 8 лет назад 0
Папка скрипта называется `dirname" $ ​​0 "`. После того, как вы перейдете туда, $ PWD будет иметь желаемое значение. glenn jackman 8 лет назад 0
Спасибо, мне потребовалось немного времени, чтобы собрать кусочки вместе, и сопутствующее чтение помогло добавить к этому, что спасло последние несколько оставшихся волос! :) Purpe_Fedora 8 лет назад 0

Похожие вопросы