Проверка и изменение разрешения файла со сценарием

попробуйте это:

find . -type f -name "*.base.coverage.txt" -exec sh -c 'paste {} paste_all_l30.p90.base.cov.norm > tmp ; mv tmp paste_all_l30.p90.base.cov.norm' \;
4
05.08.2013, 22:23
4 ответа

Странно, что Вы используете sudo изменить полномочия на файле, даже при том, что это находится в Вашем корневом каталоге. Файл принадлежит Вам? chmod u+w только дает разрешение записи владельцу файла. Если Вы - владелец, Вам не нужен sudo. Если Вы не владелец, Вам действительно нужно sudo, но chmod u+w только дает разрешение записи владельца, оно не дает Вам разрешение для записи в файл. Таким образом, после выполнения chmod u+w, файл все еще не перезаписываем Вами, который является что [ -w … ] тесты.

Выполненный ls -l ~/scripts/text.txt проверять владение и полномочия на файле.

Кроме этого, всегда помещаемые двойные кавычки вокруг подстановок переменных. (Или можно изучить все правила и сделать сценарий трудно для поддержания людьми, которые не знают всех правил.) Раздражающе, $file в оболочке синтаксис не означает, “принимают значение переменной file”, это означает, “принимают значение переменной file, проанализируйте его как список подстановочных шаблонов и замените каждый шаблон списком соответствия файлам, если там соответствуют файлам”. Этот дополнительный материал выключен, если замена происходит в двойных кавычках: "$file" означает, “принимают значение переменной file”.

Кроме того, Вам не нужны все эти фигурные скобки.

if [ ! -w "$file" ]
then
  sudo chmod u+w "$file" && echo "The file is now writable"
elif [ -w "$file" ]
then
  echo "The file is already writable"
fi

С тех пор [ -w "$file" ] отрицание [ ! -w "$file" ], elif тест будет всегда успешно выполняться, если он будет достигнут. (Если нет состояние состязания, в этом случае elif тест, который тестирует то же условие снова, может возвратить другой результат, который плох.), Таким образом, Вы можете и должны упростить это до

if [ ! -w "$file" ]
then
  sudo chmod u+w "$file" && echo "The file is now writable"
else
  echo "The file is already writable"
fi
3
27.01.2020, 20:54
  • 1
    я попытаюсь помнить эту информацию в будущем. Как я сказал, что это - один из моих первых сценариев, и я понятия не имел, что должен использовать двойные кавычки вокруг переменных. –  Andrew 06.08.2013, 22:27

Вы пропускаете кавычку.

echo "The file is now writable;

Должен быть

echo "The file is now writable";

Теперь, когда Вы зафиксировали это, я думаю, что Вы только изменяете полномочия для root (не 100%, знакомых с алфавитной схемой полномочий) как u поддерживает владельца, который является root.

Можно хотеть попытаться использовать a или o, теперь создание строки

then { sudo chmod a+w $file; } && { echo "The file is now writable"; }

Дополнительные вещи: можно хотеть exit 1 когда файл не существует.

2
27.01.2020, 20:54
  • 1
    я зафиксировал недостающую метку кавычки в коде выше, но недостающая метка кавычки не отсутствует в моем коде. –  Andrew 05.08.2013, 22:13
  • 2
    @Andrew пересмотрел мой ответ –  tdlive aw'sum 05.08.2013, 22:19
  • 3
    a+w пересмотр работал. Я не использовал, если операторы очень долго и по-видимому это проверяло на полномочия записи для всех. Спасибо –  Andrew 05.08.2013, 22:27
  • 4
    "u" не является текущим пользователем, это - владелец файла. –  jordanm 05.08.2013, 22:44
  • 5
    Получил "текущего пользователя" отсюда, обновит –  tdlive aw'sum 05.08.2013, 22:45

Протестировано с помощью приведенного ниже сценария, все работает нормально

Приведенный ниже сценарий будет проверять условие записи для текущего пользователя, вошедшего в систему, если разрешения на запись не было, он добавит разрешение на запись, только если владельцем файла является тот же текущий пользователь, вошедший в систему

Если вы хотите разрешить запись всем, используйте sudo chmod a+w path

#!/bin/bash
path="/scripts/text.txt"
if [[ -f $path ]]
then
echo "$path file exsists"
if [[ -w $path ]]
then
echo "$path file is writable"
else
echo "$path file is not writable"
echo "Now we are adding write acess to the file"
chmod u+w $path
if [[ -w $path ]]
then
echo "$path  file is writable now"
fi
fi
else
echo "$path file doesnt exsists"
fi
0
27.01.2020, 20:54

Попробуйте использовать приведенный ниже код.

#!/bin/bash
file=~/scripts/text.txt
# To check existence of the file
[ -e $file ] && E="The file exists" || E="The file does NOT exists"
echo "$E"

# checking whether the file is writable or not and changing permissions

[ -w $file ] && F="The file is already Writable" || F="The file is now Writable"
chmod u+w $file 
echo "$F"
0
27.01.2020, 20:54

Теги

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