Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 Dec 2024 21:44:02 GMT
From:      Joerg Wunsch <joerg@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 1330ea449802 - stable/13 - MFC: devd.conf(5): explain difference between internal and shell variables
Message-ID:  <202412272144.4BRLi2Jx062640@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by joerg:

URL: https://cgit.FreeBSD.org/src/commit/?id=1330ea449802aaf36d4e3fb8e98fcee5be1f5aeb

commit 1330ea449802aaf36d4e3fb8e98fcee5be1f5aeb
Author:     Joerg Wunsch <joerg@FreeBSD.org>
AuthorDate: 2024-12-20 20:16:52 +0000
Commit:     Joerg Wunsch <joerg@FreeBSD.org>
CommitDate: 2024-12-27 21:42:54 +0000

    MFC: devd.conf(5): explain difference between internal and shell variables
    
    devd.conf by default considers many variables as internal, possibly
    expanding them to an empty string.  Shell variables thus need to be
    wrapped into braces.
    
    Reviewed by:    imp, Andre Albsmeier
    Differential Revision:  <https://reviews.freebsd.org/D48154>;
    
    (cherry picked from commit 1fc7922f9f905b62ef9a6c03be498c282e7b382e)
---
 sbin/devd/devd.conf.5 | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 56 insertions(+), 1 deletion(-)

diff --git a/sbin/devd/devd.conf.5 b/sbin/devd/devd.conf.5
index 5e438ab6aeac..49d4ef84c5fa 100644
--- a/sbin/devd/devd.conf.5
+++ b/sbin/devd/devd.conf.5
@@ -38,7 +38,7 @@
 .\" ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
 .\" SOFTWARE.
 .\"
-.Dd September 22, 2022
+.Dd December 20, 2024
 .Dt DEVD.CONF 5
 .Os
 .Sh NAME
@@ -668,6 +668,26 @@ For example:
 // part of the previous comment.
 .Ed
 .Ss Notes on Variable Expansion
+Variables are expanded by preceding them by a
+.Dq $
+sign.
+Any text immediately following that sign, starting with a letter, a minus sign
+.Dq - ,
+an underscore
+.Dq _ ,
+or an asterisk
+.Dq *
+is considered an internal variable, and expanded accordingly.
+If that variable does not exist, it silently expands to an empty string.
+Consequently, if the intention is to pass a
+.Xr sh 1
+variable, it must be surrounded by braces to prevent it from being
+considered an internal variable.
+.Pp
+See
+.Sx EXAMPLES
+for a detailed example.
+.Pp
 To prevent issues with special shell characters, the following happens for each
 variable
 .Ic $foo .
@@ -685,6 +705,10 @@ The value of the
 .Ic foo
 variable is inserted into the buffer with all single quote characters
 prefixed by a backslash.
+.It
+A final
+.Dq '
+is inserted.
 .El
 .Pp
 See
@@ -788,6 +812,37 @@ detach 0 {
 };
 .Ed
 .Pp
+The following example illustrates the difference betwen internal and shell variables:
+.Bd -literal
+attach 20 {
+        device-name             "umodem[0-9]+";
+        match "vendor"          "0x2047";
+        match "product"         "0x001(0|3|4)";
+        match "interface"       "0";
+        action "cd /dev; p=$product; dn=$device-name; \\
+                un=$(sysctl -n dev.umodem.${dn#umodem}.ttyname); \\
+                chmod 666 cua${un}; ln -sf cua${un} mspfet${p#0x}";
+};
+.Ed
+.Pp
+.Dq product ,
+and
+.Dq device-name
+are internal variables.
+Their contents are initially assigned to shell variables
+.Dq p ,
+and
+.Dq dn ,
+respectively.
+Then, variable
+.Dq dn
+is used inside a shell command substitution, assigning to shell variable
+.Dq un .
+Finally, this shell variable is used in two other shell statements, where
+it needs to be wrapped in braces in order to prevent it from being
+considered in internal variable to
+.Nm devd .
+.Pp
 The installed
 .Pa /etc/devd.conf
 has many additional examples.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202412272144.4BRLi2Jx062640>