Bash / Debian: странное поведение Makefile

bind '%' split-window -h -c '#{pane_current_path}'  # Split panes horizontal
bind '"' split-window -v -c '#{pane_current_path}'  # Split panes vertically
bind c new-window -c '#{pane_current_path}' # Create new window

Добавьте последнюю строку в свой ~ / .tmux.conf , чтобы также поддерживать $ PWD в новом окне.

7
06.06.2018, 19:46
2 ответа

Tu echoes uno de los que interpreta backslash -escapa . Un \nsignifica una nueva línea, por lo que obtienes exactamente eso. La última barra invertida viene como -, ya que \sno es un código de escape válido.

Make ejecuta los comandos a través de un shell, usando /bin/shpor defecto, y en Debian eso es dash. El echointegrado de Dash procesa las barras invertidas. Bash no. (Y tampoco lo hace el /bin/echoexterno en Debian, no es que importe a menos que ejecute explícitamente/bin/echo).

Su mejor opción es usar printfexplícitamente, al menos es seguro porque siempre procesa los escapes de barra invertida -. Lo siguiente siempre debe hacer lo mismo, el \\nal principio produce una barra invertida real y un n, el \nluego produce una nueva línea para finalizar la línea.

foo:
        printf '\\newcommand\n' > foo

(o, si desea evitar el procesamiento de barras invertidas, utiliceprintf "%s" '\newcommand')

Consulte la pregunta ¿Por qué printf es mejor que echo? para obtener más detalles sobre echotrampas.

12
27.01.2020, 20:17

Su echoes compatible con POSIX y expande los escapes de barra invertida C. Esto es más probable porque /bin/shes dashen lugar de bash.

Hay una solución simple :agregue otra barra invertida para citar la barra invertida:

 test-makefile:
        echo '\\newcommand{\\seance}{seance1}' > seances/seance.tex

Tenga en cuenta que el estándar POSIX marca los escapes de barra invertida C para echouna extensión XSI pero el autor del conjunto de pruebas de cumplimiento de POSIX afirma que es necesario cumplir con XSI para cumplir con POSIX excepto cuando desee certificar solo un pequeño sistema para uso integrado.

Dado que no parece que la pregunta original se haya hecho para un pequeño sistema integrado, ese sistema necesitaría implementar extensiones XSI para cumplir.

Tenga en cuenta que bashen plataformas certificadas POSIX como Solaris y Mac OS se compila de manera que viene con un echocompatible de forma predeterminada. Entonces, el problema de que bash no es compatible con POSIX XSI por defecto es específico de Linux.

-5
27.01.2020, 20:17

Теги

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