Сценарий Bash некорректно обрабатывает команды npm

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

Это можно сделать, построив строку, содержащую имена файлов, разделенные новыми строками, и используя подстановку строк для удаления конца строки, а затем опираясь на расширение без кавычек, чтобы превратить усеченную строку обратно в список. Я предполагаю, что в именах файлов нет новых строк и что ваша оболочка bash или ksh (с простой sh, вы должны использовать позиционные параметры вместо именованного массива).

nl=$'\n'                              # newline, we use it as a separator
cut_from=A0000096.LOG
log_files=(A???????.LOG)
set -f; IFS="$nl"                     # disable wildcard expansion and set the word separator to newline only
log_files="$nl${log_files[*]}$nl"     # turn the array into a string with newlines separating elements
log_files=(${log_files%"$nl$cut_from$nl"})    # remove elements from $cut_from onwards and split the string into an array
unset IFS; set +f
rsnyc -a "${log_files[@]}" … elsewhere:/some/dir
-121--145452-

Оказалось, что при компиляции ядра Linux мне не удалось включить поддержку шины PCIE для brcmfmac. Для этого запустите make menuconfig и перейдите по ссылке

Device drivers
- Network device support
  - Wireless LAN
    - PCIE bus interface support for FullMAC driver

и включите поддержку шины PCIE.

-121--185319-

Использовать

      bar1+=($(echo $foo | awk '{print$1}'))

, т.е. переменная + = ( значение ) для добавления значения в массив. Конечно, код для использования массив bar1 должен выглядеть как

for foo in "${bar1[@]}"
do
    echo "$foo"
done

Конечно, всегда следует цитировать переменные оболочки (например, "$ foo" и "$ {bar1 [@]}" ), если у вас нет веской причины, и вы уверены, что знаете, что делаете.

2
22.02.2018, 06:46
2 ответа

Según la sugerencia de Olorin de ver el error del nodo, lo exploré más. A pesar del hecho de que node -vpara someuserdevolvía v9.4.0y el comando locateno encontraba ninguna versión v8instalada para ningún usuario, y tenía -instalado node, todavía estaba recibiendo el mismo error. El siguiente comando funciona. Tenga en cuenta elsource ~/.nvm/nvm.sh;

#!/bin/sh  
/bin/su tstapps -c "
cd /opt/app1/;
git remote update;
git pull origin dev;
cd /opt/app1/client/;
source ~/.nvm/nvm.sh;
npm run build;

En un momento tuve nvm use v9.5.0y luego probé, todavía funciona sin él. Luego eliminé source ~/.nvm/nvm.sh;y se rompió nuevamente. Entonces, aparentemente, el nvmno está disponible enshell-scriptsenvsin obtenerlo y el npm run buildnecesita ver nvm.

Problema extraño y parece que algunos usuarios se encontraron con problemas similares al usar nvmrecursos en bashsegún este hilo . Todavía no estoy seguro de dónde estaba obteniendo el v8. A menos que obtenga v8del directorio include/nodede las instalaciones v9. Ejemplo:

/home/someuser/.nvm/versions/node/v9.5.0/include/node/v8-platform.h
/home/someuser/.nvm/versions/node/v9.5.0/include/node/v8-profiler.h
/home/someuser/.nvm/versions/node/v9.5.0/include/node/v8-testing.h
/home/someuser/.nvm/versions/node/v9.5.0/include/node/v8-util.h
/home/someuser/.nvm/versions/node/v9.5.0/include/node/v8-value-serializer-version.h
/home/someuser/.nvm/versions/node/v9.5.0/include/node/v8-version-string.h
/home/someuser/.nvm/versions/node/v9.5.0/include/node/v8-version.h
/home/someuser/.nvm/versions/node/v9.5.0/include/node/v8.h
/home/someuser/.nvm/versions/node/v9.5.0/include/node/v8config.h
3
27.01.2020, 22:09

По крайней мере, на RedHat 6 обратите внимание, что если LC _ALL установлен, то установка других переменных окружения LC _*не будет иметь никакого эффекта, так как LC _ALL имеет приоритет над всеми остальными окружениями LC _*. переменные.

[root@nbu76 bin]# LC_TIME=en_US.UTF-8
[root@nbu76 bin]# export LC_TIME
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_IE"
LC_NUMERIC="en_IE"
LC_TIME="en_IE"
...
LC_ALL=en_IE
[root@nbu76 bin]# unset LC_ALL
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_US.UTF-8
...
LC_ALL=
[root@nbu76 bin]# export LC_TIME=en_IE
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_IE
....
LC_ALL=
-121 ---24642 ​​-

env -iочищает среду, включая переменную PATH, которая используется для поиска команд, если вы не указали полный путь. Итак, с env -iвам нужно указать полный путь к вызываемым командам. С npm, что, вероятно, происходит, так это то, что npmсам по себе является сценарием, который имеет #! /usr/bin/env nodeв качестве шебанга, поэтому поиск команды nodeзавершается ошибкой.

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

  • sudo -iu someuser sh -c "...."
  • su someuser - -c "...."(обе эти команды запускают оболочки входа в систему с некоторой очисткой среды)
  • или, с помощью env, сохраните некоторые переменные среды, как это делает команда Ubuntu service:

    $ grep env $(command -v service) -m1
    out=$(env -i LANG="$LANG" LANGUAGE="$LANGUAGE" LC_CTYPE="$LC_CTYPE" LC_NUMERIC="$LC_NUMERIC" LC_TIME="$LC_TIME" LC_COLLATE="$LC_COLLATE" LC_MONETARY="$LC_MONETARY" LC_MESSAGES="$LC_MESSAGES" LC_PAPER="$LC_PAPER" LC_NAME="$LC_NAME" LC_ADDRESS="$LC_ADDRESS" LC_TELEPHONE="$LC_TELEPHONE" LC_MEASUREMENT="$LC_MEASUREMENT" LC_IDENTIFICATION="$LC_IDENTIFICATION" LC_ALL="$LC_ALL" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" status 2>&1)
    

    Вероятно, вам все это не нужно, но оставьте $PATH, $TERMи, возможно, установите LC_ALL=C.

1
27.01.2020, 22:09

Теги

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