работа bash-скрипта отличается при запуске из строки и из файла

Рейтинг: 0Ответов: 1Опубликовано: 26.01.2023

при написании скрипта непосредственно в bash всё исполняется "лучше",в чем при вызове того же кода из файла, в чём может быть причина?

> pid=(`pgrep konsole -u $USER | tr '\n' ' '`)
> for i in ${pid}; do SESSIONS=(`qdbus org.kde.konsole-$i | grep /Sessions/ | tr '\n' ' ' `); echo "i: "$i" Session #"$SESSIONS"\n" ; done

тут видно что существуют 2 процесс и в каждом запущено несколько вкладок

i: 906 Session #/Sessions/2
 i: 906 Session #/Sessions/3
 i: 906 Session #/Sessions/5
 i: 906 Session #/Sessions/6
 i: 906 Session #/Sessions/8
 i: 906 Session #/Sessions/9

i: 917 Session #/Sessions/1
 i: 917 Session #/Sessions/2
 i: 917 Session #/Sessions/3
 i: 917 Session #/Sessions/4

идентичный код записан в файл

#watcher.sh
pid=(`pgrep konsole -u $USER | tr '\n' ' ' `)
if [[ ${pid} ]] ; then
  for i in ${pid} ; do 
    SESSIONS=(`qdbus org.kde.konsole-$i | grep /Sessions/ | tr '\n' ' ' `)
    echo "pid: "$i" Session #"$SESSIONS"\n" 
    done
fi

вызываю

> ./watcher.sh

получаю:

pid: 906 Session #/Sessions/2\n

то есть из скрипта мало того, что echo не узнаёт \n и выводит как строку, так ещё и массивы содержат только одно значение

система: manjaro, kde plasma, konsole, zsh

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

Ответы

▲ 0

Эврика, друзья

я обнаружил что конструкция вызова утилит var=(` ... `) при вызове из скрипта, по не явной причине возвращает, только один pid в то же время, конструкция var=$(...) работает одинаково при любом вызове

итоговый код моего отрывка выглядит следующим образом:

pid=$(pgrep konsole -u $USER  | tr '\n' ' ' )
echo -e $pid"\n"
  for i in ${pid} ; do 
    SESSIONS=$(qdbus org.kde.konsole-$i | grep /Sessions/ | tr '\n' ' ' )
    echo -e  "pid: "$i" Session #"$SESSIONS"\n" 
  done

ответ данного скрипта

906 917 

pid: 906 Session #/Sessions/10 /Sessions/2 /Sessions/3 /Sessions/5 /Sessions/6 /Sessions/8 /Sessions/9 

pid: 917 Session #/Sessions/1 /Sessions/2 /Sessions/3 /Sessions/4

наличие #!/bin/bash в первой строке никак не влияет на исполнение скрипта