aboutsummaryrefslogtreecommitdiff
path: root/po/fr/LC_MESSAGES/_tils/2021-01-17-posix-sh-and-shebangs.po
blob: e285d50a92a15b203d9cef5497e1887f022129d5 (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#
msgid ""
msgstr ""

msgid "title: POSIX sh and shebangs"
msgstr ""

msgid "date: 2021-01-17"
msgstr ""

msgid "layout: post"
msgstr ""

msgid "lang: en"
msgstr ""

msgid "ref: posix-sh-and-shebangs"
msgstr ""

msgid ""
"As I [keep moving][posix-awk-0] [towards POSIX][posix-awk-1], I'm on the "
"process of migrating all my Bash scripts to POSIX sh."
msgstr ""

msgid ""
"As I dropped `[[`, arrays and other Bashisms, I was left staring at the "
"first line of every script, wondering what to do: what is the POSIX sh "
"equivalent of `#!/usr/bin/env bash`? I already knew that POSIX says nothing "
"about shebangs, and that the portable way to call a POSIX sh script is `sh "
"script.sh`, but I didn't know what to do with that first line."
msgstr ""

msgid "What I had previously was:"
msgstr ""

msgid ""
"#!/usr/bin/env bash\n"
"set -Eeuo pipefail\n"
"cd \"$(dirname \"${BASH_SOURCE[0]}\")\"\n"
msgstr ""

msgid ""
"Obviously, the `$BASH_SOURCE` would be gone, and I would have to adapt some "
"of my scripts to not rely on the script location. The `-E` and `-o pipefail`"
" options were also gone, and would be replaced by nothing."
msgstr ""

msgid "I converted all of them to:"
msgstr ""

msgid "#!/bin/sh -eu\n"
msgstr ""

msgid ""
"I moved the `-eu` options to the shebang line itself, striving for "
"conciseness. But as I changed callers from `./script.sh` to `sh script.sh`, "
"things started to fail. Some tests that should fail reported errors, but "
"didn't return 1."
msgstr ""

msgid ""
"My first reaction was to revert back to `./script.sh`, but the POSIX bug I "
"caught is a strong strain, and when I went back to it, I figured that the "
"callers were missing some flags. Specifically, `sh -eu script.sh`."
msgstr ""

msgid ""
"Then it clicked: when running with `sh script.sh`, the shebang line with the"
" sh options is ignored, as it is a comment!"
msgstr ""

msgid "Which means that the shebang most friendly with POSIX is:"
msgstr ""

msgid ""
"#!/bin/sh\n"
"set -eu\n"
msgstr ""

msgid ""
"when running via `./script.sh`, if the system has an executable at "
"`/bin/sh`, it will be used to run the script;"
msgstr ""

msgid ""
"when running via `sh script.sh`, the sh options aren't ignored as "
"previously."
msgstr ""

msgid "TIL."
msgstr ""

msgid ""
"[posix-awk-0]: {% link _tils/2020-12-15-awk-snippet-shellcheck-all-scripts-"
"in-a-repository.md %} [posix-awk-1]: {% link _tils/2021-01-12-awk-snippet-"
"send-email-to-multiple-recipients-with-curl.md %}"
msgstr ""