11-30-2012
Quote:
Originally Posted by
alister
The open() system call, which is used to open a file for reading/writing, supports relative paths. When the path to the file does not contain any slashes, it is designed to look in the current working directory.
The exec*() family of system calls/library functions used to execute a file do not behave in this way. Some require an absolute path. Others (the ones with a p in their name), when the path provided does not contain a slash, will search only the directories in the $PATH environment variable.
Security aside, the PATH lookup mechanism is a convenience which saves a lot of typing. Further, since all unix-like systems do not agree on exactly where every executable should be placed, $PATH lookup insulates scripts from these differences, improving portability.
If you really wanted command invocation to work the way that file opening works, simply set PATH to [icode]./icode]. Absolute paths to commands never use PATH. Relative paths will only look in the current working directory. Such a configuration, however, if enforced from the kernel onwards, would severely break any extant unix. Boot scripts, shell profiles, software installation scripts, cronjobs, and more would all have to be rewritten.
Regards,
Alister
Adding a relative directory into your PATH can have problems beyond the obvious.
Many shells cache a list of available commands they find in PATH. Put a relative directory in there, and they may not always find all available commands because they don't know the cache needs to be regenerated every time you cd. Some may even crash if you put a relative directory in PATH.
9 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
How can I get the results of a find back without the pathname
for example if i do
find ../../ -name \*.sql
i dont want to see
directory/directory/filename.sql
I only want to see filename.sql (3 Replies)
Discussion started by: MBGPS
3 Replies
2. Shell Programming and Scripting
With C Shell you can get the root, head, tail and extension of a pathname by using pathname variable modifiers.
Example Script:
#! /bin/csh
set pathvar=/home/WSJ091305.txt
echo $pathvar:r
echo $pathvar:h
echo $pathvar:t
echo $pathvar:e
The result of executing this script is:
... (7 Replies)
Discussion started by: BCarlson
7 Replies
3. UNIX for Advanced & Expert Users
Hi All,
We use tomcat web server and it will get terminated with below error:
connection to localhost:10.0 host broken (explicit kill or server shutdown)
Please let me know how to fix this error. (5 Replies)
Discussion started by: bache_gowda
5 Replies
4. UNIX for Dummies Questions & Answers
Hi
Could someone help me?
I'm not sure how to find the full pathname of a directory.
I just want to be able to specify a directory.
e.g
directory1/directory2/directory3/directory4/directory5
I want to be able to put in "directory5"
and then i want a return of the full address.
... (3 Replies)
Discussion started by: shomila_a
3 Replies
5. Cybersecurity
I'm running IPF on solaris 10
bash-3.00# ipf -V #display ipf version
ipf: IP Filter: v4.1.9 (592)
Kernel: IP Filter: v4.1.9
Running: yes
Log Flags: 0 = none set
Default: pass all, Logging: available
Active list: 1
Feature mask: 0x107
with the following rules
bash-3.00# ipfstat -o -i... (0 Replies)
Discussion started by: h@foorsa.biz
0 Replies
6. AIX
I want to run applet on AIX 6 machine.
I already have setup $DISPLAY variable for putty session by selecting X11 option.
I got below error for any X related commands (xclock, X, applet viewer )
X connection to localhost:10.0 broken (explicit kill or server shutdown). Please can anyone... (0 Replies)
Discussion started by: kailas.girase
0 Replies
7. Shell Programming and Scripting
I have executed the below perl script for copying the file from one server to another server using scp.
#!/usr/bin/perl -w
use Net::SCP::Expect;
use strict;
$server= "x.x.x.x";
my $source = "/mypath/mypath";
my $destination = "/home/";
print "Login...Starting scp...";
$user="admin";... (1 Reply)
Discussion started by: scriptscript
1 Replies
8. Shell Programming and Scripting
Hello,
I use the following SSH script to upload *.jpg files via FTP:
#!/usr/bin/expect
set timeout -1
spawn ftp -v -i
expect ""
send "\r"
expect "Password:"
send "\r"
expect "ftp>"
send "mput *.jpg\r"
expect "ftp>"
send "quit\r"
replaced with actual ftp server/account data.
... (5 Replies)
Discussion started by: mrpi007
5 Replies
9. IP Networking
Add explicit route to 10.128.255.41/32 , gateway: 10.128.201.254
if not working, please try gateway through management port: 10.128.55.254
Just want to double confirm if this would be the correct command
#route add -net 10.128.255.41/32 10.128.201.254
And if didnt work
#route add... (1 Reply)
Discussion started by: Thilagarajan
1 Replies
LEARN ABOUT MOJAVE
env5.18
Env(3pm) Perl Programmers Reference Guide Env(3pm)
NAME
Env - perl module that imports environment variables as scalars or arrays
SYNOPSIS
use Env;
use Env qw(PATH HOME TERM);
use Env qw($SHELL @LD_LIBRARY_PATH);
DESCRIPTION
Perl maintains environment variables in a special hash named %ENV. For when this access method is inconvenient, the Perl module "Env"
allows environment variables to be treated as scalar or array variables.
The "Env::import()" function ties environment variables with suitable names to global Perl variables with the same names. By default it
ties all existing environment variables ("keys %ENV") to scalars. If the "import" function receives arguments, it takes them to be a list
of variables to tie; it's okay if they don't yet exist. The scalar type prefix '$' is inferred for any element of this list not prefixed by
'$' or '@'. Arrays are implemented in terms of "split" and "join", using $Config::Config{path_sep} as the delimiter.
After an environment variable is tied, merely use it like a normal variable. You may access its value
@path = split(/:/, $PATH);
print join("
", @LD_LIBRARY_PATH), "
";
or modify it
$PATH .= ":.";
push @LD_LIBRARY_PATH, $dir;
however you'd like. Bear in mind, however, that each access to a tied array variable requires splitting the environment variable's string
anew.
The code:
use Env qw(@PATH);
push @PATH, '.';
is equivalent to:
use Env qw(PATH);
$PATH .= ":.";
except that if $ENV{PATH} started out empty, the second approach leaves it with the (odd) value "":."", but the first approach leaves it
with ""."".
To remove a tied environment variable from the environment, assign it the undefined value
undef $PATH;
undef @LD_LIBRARY_PATH;
LIMITATIONS
On VMS systems, arrays tied to environment variables are read-only. Attempting to change anything will cause a warning.
AUTHOR
Chip Salzenberg <chip@fin.uucp> and Gregor N. Purdy <gregor@focusresearch.com>
perl v5.18.2 2013-11-04 Env(3pm)