Запишите пользовательскую команду в файл - PullRequest
1 голос
/ 16 апреля 2019

Мне нужно написать пользовательскую команду в файл с bash.

Testcase будет script.sh -- echo "Hello \$USER", и я хочу файл, содержащий echo "Hello $USER" (или echo Hello\ $USER), который может быть выполнен

Я использую heredoc для записи в файл, что-то вроде

cat > "${FILE}" <<EOF
Your command is:
${CMD}
"$@"
EOF

Я пытался использовать printf -v CMD '%q ' "$@", но это приводит к echo Hello\ \$USER, а это не то, что я хочу.

Как мне это сделать?

1 Ответ

1 голос
/ 17 апреля 2019

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

  • "$@" синтаксис означает: Развернуть все аргументы до "$1" "$2" ...
  • ЭтоКажется, не работает в моем случае, поэтому сделайте это вручную:
    CMD=()
    for var in "$@"; do
        CMD+=( '"'"${var}"'"' )
    done

    cat > ${FILE} <<EOF
    Your command is: 
    ${CMD[@]}

Итак, в основном: Создайте массив строк в кавычках.Затем распечатайте это.Это работает для тестового случая.

Но: Не удается для многих других вещей.Пример: myScript.sh -- echo "Hello \"\$USER\"", который оставляет кавычки без экранирования.

Таким образом, я заключаю, что эта задача невозможна или, по крайней мере, неосуществима, и предложила бы использовать решение на основе printf, которое, как представляется, также, как и другие командысправиться с этим (пример: srun/sbatch на SLURM)

...