Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F143987172
D47681.id146740.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D47681.id146740.diff
View Options
diff --git a/bin/sh/main.c b/bin/sh/main.c
--- a/bin/sh/main.c
+++ b/bin/sh/main.c
@@ -95,6 +95,7 @@
static struct stackmark smark, smark2;
volatile int state;
char *shinit;
+ int login;
(void) setlocale(LC_ALL, "");
initcharset();
@@ -128,13 +129,13 @@
initvar();
setstackmark(&smark);
setstackmark(&smark2);
- procargs(argc, argv);
+ login = procargs(argc, argv);
trap_init();
pwd_init(iflag);
INTON;
if (iflag)
chkmail(1);
- if (argv[0] && argv[0][0] == '-') {
+ if (login) {
state = 1;
read_profile("/etc/profile");
state1:
diff --git a/bin/sh/options.h b/bin/sh/options.h
--- a/bin/sh/options.h
+++ b/bin/sh/options.h
@@ -109,7 +109,7 @@
extern char *shoptarg; /* set by nextopt */
extern char *nextopt_optptr; /* used by nextopt */
-void procargs(int, char **);
+int procargs(int, char **);
void optschanged(void);
void freeparam(struct shparam *);
int nextopt(const char *);
diff --git a/bin/sh/options.c b/bin/sh/options.c
--- a/bin/sh/options.c
+++ b/bin/sh/options.c
@@ -64,7 +64,7 @@
char *minusc; /* argument to -c option */
-static void options(int);
+static int options(int);
static void minus_o(char *, int);
static void setoption(int, int);
static void setoptionbyindex(int, int);
@@ -76,19 +76,20 @@
* Process the shell command line arguments.
*/
-void
+int
procargs(int argc, char **argv)
{
- int i;
+ int i, login;
char *scriptname;
argptr = argv;
+ login = argptr[0] && argptr[0][0] == '-';
if (argc > 0)
argptr++;
for (i = 0; i < NOPTS; i++)
optval[i] = 2;
privileged = (getuid() != geteuid() || getgid() != getegid());
- options(1);
+ login |= options(1);
if (*argptr == NULL && minusc == NULL)
sflag = 1;
if (iflag != 0 && sflag == 1 && isatty(0) && isatty(1)) {
@@ -119,6 +120,8 @@
argptr++;
}
optschanged();
+
+ return (login);
}
@@ -139,12 +142,13 @@
* to the set special builtin.
*/
-static void
+static int
options(int cmdline)
{
char *kp, *p;
int val;
int c;
+ int login = 0;
if (cmdline)
minusc = NULL;
@@ -190,6 +194,8 @@
if (q == NULL || minusc != NULL)
error("Bad -c option");
minusc = q;
+ } else if (c == 'l') {
+ login = 1;
} else if (c == 'o') {
minus_o(*argptr, val);
if (*argptr)
@@ -198,13 +204,13 @@
setoption(c, val);
}
}
- return;
+ return (login);
/* When processing `set', a single "-" means turn off -x and -v */
end_options1:
if (!cmdline) {
xflag = vflag = 0;
- return;
+ return (login);
}
/*
@@ -217,7 +223,7 @@
if (!cmdline) {
if (*argptr == NULL)
setparam(0, argptr);
- return;
+ return (login);
}
/*
@@ -236,6 +242,8 @@
/* We need to keep the final argument */
argptr--;
}
+
+ return (login);
}
static void
diff --git a/bin/sh/sh.1 b/bin/sh/sh.1
--- a/bin/sh/sh.1
+++ b/bin/sh/sh.1
@@ -29,7 +29,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd December 14, 2022
+.Dd November 20, 2024
.Dt SH 1
.Os
.Sh NAME
@@ -37,14 +37,14 @@
.Nd command interpreter (shell)
.Sh SYNOPSIS
.Nm
-.Op Fl /+abCEefhIimnPpTuVvx
+.Op Fl /+abCEefhIilmnPpTuVvx
.Op Fl /+o Ar longname
.Oo
.Ar script
.Op Ar arg ...
.Oc
.Nm
-.Op Fl /+abCEefhIimnPpTuVvx
+.Op Fl /+abCEefhIilmnPpTuVvx
.Op Fl /+o Ar longname
.Fl c Ar string
.Oo
@@ -52,7 +52,7 @@
.Op Ar arg ...
.Oc
.Nm
-.Op Fl /+abCEefhIimnPpTuVvx
+.Op Fl /+abCEefhIilmnPpTuVvx
.Op Fl /+o Ar longname
.Fl s
.Op Ar arg ...
@@ -251,6 +251,8 @@
from input when in interactive mode.
.It Fl i Li interactive
Force the shell to behave interactively.
+.It Fl l
+Force the shell to act as if it has been invoked as a login shell.
.It Fl m Li monitor
Turn on job control (set automatically when interactive).
A new process group is created for each pipeline (called a job).
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Feb 4, 12:16 AM (17 h, 23 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28428213
Default Alt Text
D47681.id146740.diff (3 KB)
Attached To
Mode
D47681: sh(1): add -l option
Attached
Detach File
Event Timeline
Log In to Comment