Автор Тема: bash script - ошибка перехода в каталог с тильдой  (Прочитано 2461 раз)

0 Пользователей и 1 Гость просматривают эту тему.

sunjob

  • Гость
в функцию на баше отправляется параметр "путь к другому скрипту с тильдой", вида

~/PATH_TO_FILE/FILE

в функции происходит парсинг на путь и имя файла, при попытке перейти в каталог, выдается сообщение ошибки
если тут же копипастом вставить к ком. строку просмотр каталога 'ls -ld' - то каталог видится
если так же сделать cd - тоже все нормально
 
если вызывающий аргумент подрихтовать и тильду заменить на нормальный путь /home/$USER
то в функции переходит происходит нормально
func            '~/PATH_TO_FILE/FILE' - error
func  '/home/$USER/PATH_TO_FILE/FILE' - OK

если просто в терминале набрать переход с тильдой то все нормально:
cd ~/PATH_TO_FILE/

далее кусок функции и эхо вывод

#!/bin/sh

func()
{
    SCRIPT=$(basename "$1")
SCRIPT_DIR=$(dirname  "$1")

echo "
'$1'
'$SCRIPT_DIR'
"
# пробовал "оба варианта"
cd   $SCRIPT_DIR       
cd   $(dirname  "$1")

...

}

вызов функции

func            '~/PATH_TO_FILE/FILE' - error
func  '/home/$USER/PATH_TO_FILE/FILE' - OK

...

run_prc.sh: line 80: cd: ~/PATH_TO_FILE: No such file or directory

cd ~/PATH_TO_FILE - OK

...

менять путь - не катит

/bin/bash-3.1.17 
/bin/bash-3.2.57 
/bin/bash-4.3.30

slackware-12.2

* Используйте теги для оформления сообщения, ihammers.
« Последнее редактирование: 26 Октябрь 2015, 05:01:17 от ihammers »
 


Оффлайн ogost

  • Главный модератор
  • Ветеран
  • *****
  • Сообщений: 2928
  • Linux Registered User #547151
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #1 : 26 Октябрь 2015, 05:05:51 »
1. от кого запускается скрипт?
2. куда указывает /bin/sh?

sunjob

  • Гость
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #2 : 26 Октябрь 2015, 05:26:36 »
//
// run.sh
//

#!/bin/sh
clear; set -e

func()
{
echo "ARG1 = $1"
cd    $1
pwd
}

LST=01.lst

while read LINE
do
echo "LINE = $LINE"

ARG=$(echo $LINE | cut -d ' ' -f1)
ARG=${ARG// /}
func $ARG
done < $LST

//
// 01.lst
//
~/tmp  sss
//
// вывод
//
LINE = ~/tmp  sss
ARG1 = ~/tmp
./run.sh: line 7: cd: ~/tmp: No such file or directory

//
// куда указывает /bin/sh?
//

написал же

/bin/bash-3.1.17 
/bin/bash-3.2.57 
/bin/bash-4.3.30


//
// от кого запускается скрипт?
//
от себя, т.е от пользователя
 

Оффлайн ihammers

  • Главный модератор
  • Ветеран
  • *****
  • Сообщений: 1742
  • Debian GNU/Linux Stretch
    • Алтайская Группа Пользователей Linux
  • Jabber: ihammers@jabber.ru
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #3 : 26 Октябрь 2015, 08:37:46 »
// куда указывает /bin/sh?
//

написал же

/bin/bash-3.1.17
/bin/bash-3.2.57
/bin/bash-4.3.30
Что-то слишком много, он должен ссылаться на 1 интерпретатор.
Debian GNU/Linux Stretch, kernel 4.9.0-5-amd64,
LXQt/KDE/OpenBox AMD Phenon X4 / 16Gb RAM / ATI HD7750 Silent
_______________________________
Debian GNU/Linux Stretch, kernel 4.9.0-5-amd64, LXQt/KDE/OpenBox
Acer Aspire One 722 AMD C60 / 4Gb RAM / ATI HD6290
 

Оффлайн ogost

  • Главный модератор
  • Ветеран
  • *****
  • Сообщений: 2928
  • Linux Registered User #547151
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #4 : 26 Октябрь 2015, 08:39:10 »
у меня /bin/sh указывает на dash, причем это не я менял, а было по умолчанию. баш же указывается как /bin/bash.
предположу, что в слаке тоже /bin/sh не указывает на bash, а на dash, zsh или что-то другое.

sunjob

  • Гость
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #5 : 26 Октябрь 2015, 10:10:52 »
bash

main$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2015-09-04 20:32 /bin/sh -> bash

c /bin/zsh - так же не катит

Cообщение объединено 26 Октябрь 2015, 12:17:26
весь сыр бор был из за того, что
- во первых параметр для функции берется строкой из файла, парсится, берется первое второе третье поле и отправляется в функцию
- во вторых в данном случае намного удобнее пользоваться и писать тильду, чем каждый раз ПОЛНЫЙ путь (т.е. заполнять файл, откуда берутся параметры)

п.с
решение найдено еще вчера, мне надо знать, что скажет думающая часть линуксоидов, неужели никто с подобным не сталкивался и как решали...

п.с.2
я же не здря во второй части привел упрощенный шаблон для понимания что к чему
run.sh, 01.lst, вывод
« Последнее редактирование: 26 Октябрь 2015, 12:17:26 от sunjob »
 

Оффлайн ogost

  • Главный модератор
  • Ветеран
  • *****
  • Сообщений: 2928
  • Linux Registered User #547151
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #6 : 26 Октябрь 2015, 15:00:03 »
я обычно беру $HOME и не парюсь.

sunjob

  • Гость
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #7 : 26 Октябрь 2015, 17:10:15 »
друг, возьми сриптец, запусти у себя, разберись что к чему там, откуда что берется и во что преобразовывается, не посчитай за труд ...

Cообщение объединено 26 Октябрь 2015, 18:33:09
он должен ссылаться на 1 интерпретатор.
                        

это как бы намек на то, что
- интерпретатор - баш
- у меня их "все есть"
- все пробовал
- все одинакого                  

как то так
« Последнее редактирование: 26 Октябрь 2015, 18:33:38 от sunjob »
 


Оффлайн vic5710

  • Местный житель
  • ***
  • Сообщений: 452
  • не умножайте сущностей сверх необходимых
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #8 : 26 Октябрь 2015, 21:56:40 »
я обычно беру $HOME и не парюсь.
+1


Cообщение объединено 26 Октябрь 2015, 22:46:45
в функцию на баше отправляется параметр "путь к другому скрипту с тильдой", вида

~/PATH_TO_FILE/FILE

вот сейчас проверил:
cat tst.sh:
#!/bin/bash

func() {
cd $1
pwd
cd $2
pwd
}

func ~/temp ~/ISO

в консоли:
MacBook-Air-Vic:temp vic57$ ./tst.sh
/Users/vic57/temp
/Users/vic57/ISO
все отработало :-X
« Последнее редактирование: 26 Октябрь 2015, 22:46:45 от vic5710 »
 

sunjob

  • Гость
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #9 : 26 Октябрь 2015, 23:12:46 »
а вы когда будете внимательно читать?  >:(

вы вот сейчам проверьте мой код, для чего я его сюдава вставил то?

run.sh
01.lst

p.s.
решение найдено еще вчера, мне надо знать, что скажет думающая часть линуксоидов, неужели никто с подобным не сталкивался и как решали...
« Последнее редактирование: 26 Октябрь 2015, 23:15:03 от sunjob »
 

Оффлайн vic5710

  • Местный житель
  • ***
  • Сообщений: 452
  • не умножайте сущностей сверх необходимых
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #10 : 26 Октябрь 2015, 23:18:06 »
в функции происходит парсинг на путь и имя файла, при попытке перейти в каталог, выдается сообщение ошибки
если тут же копипастом вставить к ком. строку просмотр каталога 'ls -ld' - то каталог видится
если так же сделать cd - тоже все нормально
 
если вызывающий аргумент подрихтовать и тильду заменить на нормальный путь /home/$USER
то в функции переходит происходит нормально
вот же ваши слова. я не вижу ошибки с тильдой.


Cообщение объединено 26 Октябрь 2015, 23:30:21
MacBook-Air-Vic:temp vic57$ cat tst

func() {
cd $1
pwd
cd $2
pwd
}
MacBook-Air-Vic:temp vic57$ . tst
MacBook-Air-Vic:temp vic57$ func ~/temp ~/ISO
/Users/vic57/temp
/Users/vic57/ISO
MacBook-Air-Vic:ISO vic57$ func ~/temp '~/ISO'
/Users/vic57/temp
-bash: cd: ~/ISO: No such file or directory

не умножайте сущностей сверх необходимых
« Последнее редактирование: 26 Октябрь 2015, 23:30:21 от vic5710 »
 

Оффлайн ZEN

  • Местный житель
  • ***
  • Сообщений: 217
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #11 : 27 Октябрь 2015, 00:05:17 »
Ну, как-то так...

zen@intel:~$ TEST=$(eval "echo ~/pwd")
zen@intel:~$ echo $TEST
/home/zen/pwd
zen@intel:~$ TEST=$(eval "echo ~root")
zen@intel:~$ echo $TEST
/root
zen@intel:~$ TEST=$(eval "echo ~-")
zen@intel:~$ echo $TEST
/tmp
zen@intel:~$ TEST=$(eval "echo ~+")
zen@intel:~$ echo $TEST
/home/zen
zen@intel:~$

Только есть опасность, что вместо пути будет вписана команда rm -r -f ~/
Так что лучше попробовать использовать функцию из вот этого примера:
http://stackoverflow.com/questions/3963716/how-to-manually-expand-a-special-variable-ex-tilde-in-bash/29310477#29310477
или вообще не заморачиваться из-за тильды
« Последнее редактирование: 27 Октябрь 2015, 00:20:44 от ZEN »
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо
 

Оффлайн vic5710

  • Местный житель
  • ***
  • Сообщений: 452
  • не умножайте сущностей сверх необходимых
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #12 : 27 Октябрь 2015, 00:27:01 »
или вообще не заморачиваться из-за тильды
или не ставить лишних кавычек
MacBook-Air-Vic:~ vic57$ echo ~
/Users/vic57
MacBook-Air-Vic:~ vic57$ echo '~'
~
MacBook-Air-Vic:~ vic57$ echo "~"
~
MacBook-Air-Vic:~ vic57$
 

sunjob

  • Гость
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #13 : 27 Октябрь 2015, 00:28:56 »
ребята, смотрите выложенный скрипт, он полностью описывает и моделирует задачу!!!

run.sh
01.lst

п.с
решение найдено еще вчера, мне надо знать, что скажет думающая часть линуксоидов, неужели никто с подобным не сталкивался и как решали...
 

Оффлайн vic5710

  • Местный житель
  • ***
  • Сообщений: 452
  • не умножайте сущностей сверх необходимых
Re: bash script - ошибка перехода в каталог с тильдой
« Ответ #14 : 27 Октябрь 2015, 02:50:37 »
#!/bin/sh
clear; set -e
func()
{
echo "ARG1=$1"
cd  $1
pwd
}


LST=01.lst
while read LINE
do
echo LINE="$LINE"
ARG=$(echo "$LINE" | cut -d ' ' -f1)
#ARG=${ARG// /}   я не понял зачем это здесь
ARG=${ARG//'~'/$HOME}
func $ARG
done < 01.lst
но это костыль. в таких задачах надо использовать абсолютные пути или будете путаться все время
« Последнее редактирование: 27 Октябрь 2015, 10:45:04 от vic5710 »
 

Теги:
 

арифметика с временем на bash [РЕШЕНО]

Автор A_STAS

Ответов: 8
Просмотров: 6473
Последний ответ 02 Апрель 2013, 21:47:06
от A_STAS
bash замена одиночного слеша на экранированный [РЕШЕНО]

Автор zCirill

Ответов: 0
Просмотров: 2959
Последний ответ 04 Июнь 2014, 21:29:47
от zCirill
bash

Автор MERCURY

Ответов: 3
Просмотров: 1279
Последний ответ 27 Июль 2015, 13:22:41
от Malaheenee
Bash скрипт замена одного слова

Автор Racer

Ответов: 2
Просмотров: 1049
Последний ответ 14 Декабрь 2016, 23:59:21
от }{ronoTrigger
bash скрипт для бесконечного парсинга лога

Автор zCirill

Ответов: 7
Просмотров: 3888
Последний ответ 12 Ноябрь 2013, 12:26:32
от zCirill