Сообщение об ошибке - dummy.sh: строка 29: синтаксическая ошибка: неожиданный конец файла [закрыто]

¿Qué es ~foo

Cita de bash manual(con énfasis añadido):

If a word begins with an unquoted tilde character (`~'), all of the characters preceding the first unquoted slash (or all characters, if there is no unquoted slash) are considered a tilde-prefix.If none of the characters in the tilde-prefix are quoted, the characters in the tilde-prefix following the tilde are treated as a possible login name.

~foose expande al foodirectorio de inicio del usuario exactamente como se especifica en /etc/passwd. Tenga en cuenta que esto puede incluir nombres de usuario del sistema; no significa necesariamente que los usuarios humanos o que realmente puedan iniciar sesión localmente (, pueden iniciar sesión a través de claves SSH, por ejemplo ).

De hecho, como se indica en los comentarios , bashutilizará la función getpwnam. Esa función en sí está especificada por el estándar POSIX , por lo tanto, debería existir en la mayoría de los sistemas similares a Unix -, incluido macOS X . Esta función no se limita solo a /etc/passwdy busca en otras bases de datos, como LDAP y NIS. Extracto particular del código fuentebash, archivo tilde.c, que comienza en la línea 394:

  /* No preexpansion hook, or the preexpansion hook failed.  Look in the
     password database. */
  dirname = (char *)NULL;
#if defined (HAVE_GETPWNAM)
  user_entry = getpwnam (username);
#else
  user_entry = 0;

Ejemplo práctico

A continuación puede ver pruebas con nombres de usuario del sistema en mi sistema.Preste atención a la entrada correspondiente passwdy al resultado dels ~username

$ grep '_apt' /etc/passwd
_apt:x:104:65534::/nonexistent:/bin/false
$ ls ~_apt
ls: cannot access '/nonexistent': No such file or directory
$ grep '^lp' /etc/passwd
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
$ ls ~lp
ls: cannot access '/var/spool/lpd': No such file or directory

Incluso si, por ejemplo, la cuenta _aptestá bloqueada como sugiere el resultado de passwd -S apt, aún aparece como posible nombre de inicio de sesión:

_apt L 11/29/2017 0 99999 7 -1

Tenga en cuenta:Esta no es una función específica de macOS, sino una función específica de shell -.

-3
16.11.2018, 22:00
1 ответ

Используйте << - EOF вместо << EOF , если хотите использовать отступ. Затем сделайте отступ текста табуляцией.

Наконец, вам нужно поставить EOF , чтобы отметить конец здесь-документа.

Ваш кодовый блок будет иметь вид:

    ftp -inv $HOST <<-EOF
            user $USER $PASSWORD
            cd /work/test//$input_variable/path/to destination/
            mput x.csv
    EOF

См. Также http://www.tldp.org/LDP/abs/html/here-docs.html , пример 19.4 для получения дополнительной информации.

2
28.01.2020, 05:19

Теги

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