Автор Тема: вопрос по echo  (Прочитано 3333 раз)

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

Оффлайн ek-nfn

  • Местный
  • *****
  • Автор темы
  • Сообщений: 1422
вопрос по echo
« : Ноябрь 07, 2014, 06:06:57 »
простейший скрипт для Caja с задачей записи полного пути файла (из окна ФМ), взятого в кавычки "..",  в файл ~/1.

#!/bin/sh
echo -n \"$CAJA_SCRIPT_SELECTED_FILE_PATHS\"  > ~/1


Проблема в том, что в тексте файла ~/1 перед последней кавычкой появляется пробел.
типа так
Если же писать путь без кавычек, то уже нормально - в тексте в конце пути пробела уже нет.

Как можно избавится от пробела, сохранив кавычки ?   :)

 
« Последнее редактирование: Ноябрь 07, 2014, 07:01:53 от ek-nfn »
Devuan ASCII x32..x64

Онлайн sfs

  • Местный
  • *****
  • Сообщений: 723
    • PuppyRus-Arch
Re: вопрос по echo
« Ответ #1 : Ноябрь 07, 2014, 10:55:44 »
Если решать "в лоб"
echo -n \"$CAJA_SCRIPT_SELECTED_FILE_PATHS\"  |sed 's/ "$/"/' > ~/1А вообще лучше понять, откуда берется пробел в переменной

Оффлайн ek-nfn

  • Местный
  • *****
  • Автор темы
  • Сообщений: 1422
Re: вопрос по echo
« Ответ #2 : Ноябрь 07, 2014, 11:12:03 »
Проблема, видимо, в особенностях самого скрипта "CAJA_SCRIPT_SELECTED_FILE_PATHS", что-то там с присутствующей в нем переменной $IFS . Если взять все выражение в общие кавычки, то пробел заменяется переводом строки.

Нормально выдавалось лишь в варианте вообще без всяких кавычек - echo -n $CAJA_SCRIPT_SELECTED_FILE_PATHS | .......
Поэтому, чтобы не изучать Bash, сделал через дополнительную переменную и выдернутый путь вместо файла загнал в "мышиный" буфер (это который через колесико). Получилось такое:

#!/bin/sh
a=$(echo -n $CAJA_SCRIPT_SELECTED_FILE_PATHS)
echo -n \"$a\" | xclip
# Если нужен обычный буфер, то вывод в него делаем такой строкой
# echo -n \"$a\" | xclip -filter -selection clipboard
 

Скрипту даете разрешение на запуск и перекладываете в папку скриптов Caja ( /home/nfn/.config/caja/scripts ) .  Далее через ПКМ за два клика получаете в буфере полный путь к файлу, заключенный в кавычки, что позволяет иметь пробелы в названиях каталогов и файлов при работе в терминале.

Кстати, скрипты для присвоения файлам права на запуск и снятие этого права ( не мои )
разрешение на запуск . То же туда - в Caja

#!/bin/sh
# set_exec
# Sets selected files as executable
# looping required for multiple filenames with spaces
for arg
do
 chmod +x "$arg"
done

на запрет

#!/bin/sh
#
# This script removes executable bit from all files (excluding directories!)
# recursively. Very useful when you copy files from MS Win partition or from a
# CD recorded on Windows.
#
# Author: Krzysztof Luks <m00se@iq.pl>
#
# Copyright (C) 2002 Krzysztof Luks
# Licence: GNU GPL 2 or later.
#

# set desired mode here
MODE="644"

# We don't want to split CAJA_SCRIPT_SELECTED_FILE_PATHS on spaces.
IFS="
"

for ARG in $CAJA_SCRIPT_SELECTED_FILE_PATHS
do
   if [ -d "$ARG" ]
   then
      for FILE in `find "$ARG" -type f`
      do
         chmod -f $MODE "$FILE"
      done
   elif [ -f "$ARG" ]
   then
      chmod -f $MODE "$ARG"
   fi
done

« Последнее редактирование: Ноябрь 07, 2014, 12:34:12 от ek-nfn »
Devuan ASCII x32..x64

Оффлайн ek-nfn

  • Местный
  • *****
  • Автор темы
  • Сообщений: 1422
Re: вопрос по echo
« Ответ #3 : Ноябрь 07, 2014, 11:16:15 »
Если решать "в лоб"
echo -n \"$CAJA_SCRIPT_SELECTED_FILE_PATHS\"  |sed 's/ "$/"/' > ~/1А вообще лучше понять, откуда берется пробел в переменной

Твой тоже работает. Где ты был, когда я репу чесал ?  ;D
Devuan ASCII x32..x64

Онлайн sfs

  • Местный
  • *****
  • Сообщений: 723
    • PuppyRus-Arch
Re: вопрос по echo
« Ответ #4 : Ноябрь 07, 2014, 12:21:50 »
Подозреваю, что моя подсказка из области "костыль"
Я всегда где-то рядом и по sh awk готов помочь

Оффлайн ek-nfn

  • Местный
  • *****
  • Автор темы
  • Сообщений: 1422
Re: вопрос по echo
« Ответ #5 : Ноябрь 19, 2014, 10:32:09 »
А как это просто решается в thunar . Загоняешь в "особые действия" лишь одну команду - echo -n "%f" | xclip -selection clipboard  и все, в контексном меню появляется нужное действие.
Devuan ASCII x32..x64