Why is ./ sometimes needed?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Why is ./ sometimes needed?
# 1  
Old 01-29-2019
Why is ./ sometimes needed?

I typed Example 2-3 from Cooper`s Advanced Bash-Scripting Guide into my ~/bin, and it will only run if I include ./ before the filename. My other scripts in the same directory do not behave this way. $PATH includes ~/bin. I copied the file into /usr/local/bin, and it runs without ./ .
# 2  
Old 01-29-2019
./ is needed to run a script not contained in the PATH variable and located in the current directory.


look into the PATH-Variable and check if the directory of the script is really contained in it. Be aware to check for typos! This applys to all scripts in the same directory.
This User Gave Thanks to stomp For This Post:
# 3  
Old 01-29-2019
Some more info would be beneficial. For example:
- Is the script really located in ~/bin?
- Any error messages?
- Are the permissions set correctly?
- Does the script refuse to start, or does it fail somewhere in the middle? The -x (xtrace) option might help.
- Does it use a special interpreter / shell, not your default one?
- Do you have the "shebang" set?
- How does it differ from the scripts that do run?


Just to name a few...
This User Gave Thanks to RudiC For This Post:
# 4  
Old 01-29-2019
Expanding a little bit on what stomp and RudiC have already said...

What modes are displayed for the files in ~/bin that run without ./ when you run the command:
Code:
ls -l ~/bin

What modes are displayed for the files in ~/bin that do not run without ./?

What other directories are in $PATH before ~/bin?

Do any of those directories contain a file with the same name as one of the files you are trying to execute?

Normally a shell will execute the first executable file found while going through the directories listed in $PATH in the order in which they appear in $PATH. Some shells will remember where they found an executable file on a previous search and won't look again unless a pathname that had been remembered stops working.

If an execute permission bit that allows you permission to execute it isn't set on a file that you're trying to execute, you usually won't be permitted to execute it by trying to run filename or by ./filename, but the command pathname_of_shell filename will work if filename is a valid script in the shell language recognized by the shell you're invoking with pathname_of_shell.
This User Gave Thanks to Don Cragun For This Post:
# 5  
Old 01-29-2019
@stomp--I double-checked. The file in question is Cleanup2.
Code:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/m*****/bin

Code:
~/bin$ ls
case4     counter    foo           lw2                     posit-params3
cleanup2  file_info  longest-word  old_sys_info_page       sys_info_page
cleanup3  file-info  lw            old_sys_info_page.html  sys_info_page.html

--- Post updated at 04:15 PM ---

@RudiC and @Don


the file is located in ~/bin (see above)


error message
Code:
~/bin$ sudo cleanup2
sudo: cleanup2: command not found

permissions
Code:
~/bin$ ls -l cleanup2
 -rwxr-xr-x 1 m***** m***** 459 Jan 28 15:07 cleanup2


~/bin$ ls -l cleanup3
-rwxr-xr-x 1 m***** m***** 2057 Jan 29 06:13 cleanup3

shebang
Code:
#!/bin/bash
   # Proper header for a Bash script

As far as differences, go, I can't find any. Cleanup3 runs fine, but Cleanup2 won't.
Don, I tried locate cleanup and found some other files containing that string, but they aren't in $PATH
# 6  
Old 01-29-2019
Quote:
Originally Posted by Xubuntu56
@stomp--I double-checked. The file in question is Cleanup2.
Code:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/m*****/bin

Code:
~/bin$ ls
case4     counter    foo           lw2                     posit-params3
cleanup2  file_info  longest-word  old_sys_info_page       sys_info_page
cleanup3  file-info  lw            old_sys_info_page.html  sys_info_page.html

--- Post updated at 04:15 PM ---

@RudiC and @Don


the file is located in ~/bin (see above)


error message
Code:
~/bin$ sudo cleanup2
sudo: cleanup2: command not found

permissions
Code:
~/bin$ ls -l cleanup2
 -rwxr-xr-x 1 m***** m***** 459 Jan 28 15:07 cleanup2


~/bin$ ls -l cleanup3
-rwxr-xr-x 1 m***** m***** 2057 Jan 29 06:13 cleanup3

shebang
Code:
#!/bin/bash
   # Proper header for a Bash script

As far as differences, go, I can't find any. Cleanup3 runs fine, but Cleanup2 won't.
Don, I tried locate cleanup and found some other files containing that string, but they aren't in $PATH
Note that cleanup2 and cleanup3 are not the same as Cleanup2 and Cleanup3; case matters in the shell command language!

What output do you get from the commands:
Code:
od -bc ~/bin/cleanup2 | head -n 10
od -bc ~/bin/cleanup3 | head -n 10

This User Gave Thanks to Don Cragun For This Post:
# 7  
Old 01-29-2019
You didn't mention you're using sudo. The effective user (by default) is root, then. root's $PATH does NOT have ~/bin appended, or, if it has, it won't point to YOUR $HOME nad thus doesn't find cleanup2.

Does sudo cleanup3 run correctly?

Please make sure to post such important info in the first place in future!

Last edited by RudiC; 01-29-2019 at 01:40 PM..
This User Gave Thanks to RudiC For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help needed

First of all, let me state that I am a windows admin. I have a windows share mounted to /mnt/server I need a script that will either login as sudo or perform commands with sudo rights. I need the script to copy all of the users /home folders to the mounted windows share. Now If I can... (2 Replies)
Discussion started by: EricM
2 Replies

2. Shell Programming and Scripting

Help Needed

please reply for this https://www.unix.com/shell-programming-scripting/111493-cutting-lines.html its really urgent (1 Reply)
Discussion started by: jojo123
1 Replies

3. Shell Programming and Scripting

help needed...

Guys, There is a file where there are 1000s of records. In the file if some condition satisfies in a certain TAB record (TAB would be first 3 digits of a certain record) then move TAB and all the records (or lines) after TAB to new_file, until another TAB record is encountered in the same... (1 Reply)
Discussion started by: Prat007
1 Replies

4. Shell Programming and Scripting

Help needed ....

Hi... I have a folder /home/data ;where some files are present. aaa_asas.txt bbb_xxx.txt ccc_xsxas.txt ddd_sa2esa.txt ------ Also I have a file which is as follows.(/home/file1) cat /home/file1 aaa you bbb are ccc very ddd good -------- now I want to rename all the files in the folder... (7 Replies)
Discussion started by: newbee1
7 Replies

5. UNIX for Dummies Questions & Answers

Help needed please.

i've been given an assignment to Write a system utility called recycle that satisfies the following requirements as they might be displayed in a UNIX/Linux man page: NAME recycle - stores files in a recycle bin SYNOPSIS recycle ... DESCRIPTION Recycle is a replacement for the... (3 Replies)
Discussion started by: jerryboy78
3 Replies

6. UNIX for Dummies Questions & Answers

little help needed..

hi everyone i'm a noob trying to learn unix language.. but seems like i got no leads on how to start.. i'm playing with the 'ps' command.. i'm trying to show the pid, ppid, username, command, cpu utilization (in desc order), process start time and process status.. all in a command.. am i able... (3 Replies)
Discussion started by: hilofat
3 Replies

7. AIX

Little help needed.

Hello, I am quite new to AIX, but have Linux experience. Iam facing a peoblem with AIX 5.2 running on a 43p Model 150 (RS6000). I tried everyting and i cant have the network to run properly. :confused: /etc/hosts looks like this: 127.0.0.1 loopback localhost 192.168.XXX.XXX... (5 Replies)
Discussion started by: Netghost
5 Replies

8. UNIX for Dummies Questions & Answers

Help needed

HI can any one help me with the appropriate answers for the below: 1.Enter an # before a command and press .what do you see,and how do you think you can take advantage of the behaviour? 2.Is tar -cvfb20foo.tar*.c legitimate or not.will this command work without the - symbol? 3.The command... (1 Reply)
Discussion started by: akhil1460
1 Replies

9. UNIX for Dummies Questions & Answers

Help needed

Hello I am a newbie and want to learn unix . Does unix and linux are one and same. I have red hat linux cd but i want to take advice from some one wheather unix and linux are same. If not ,where i'll get a Unix os setup and how i'll install it. If linux would do then how should... (3 Replies)
Discussion started by: hunter87
3 Replies

10. Shell Programming and Scripting

Help is needed

Hi I'm trying to print a directories struct tree that will look like this: A _a _b _B __c __d __C ___e B _a _b I'm doing a recursion, but how can I know how much space is needed before printing after the recursion? (3 Replies)
Discussion started by: abcde
3 Replies
Login or Register to Ask a Question

Featured Tech Videos