Problem creating a .sh script to get into a directory

1

I'm creating a .sh script that the first step is to get into a directory.

1.

#!/bin/bash
cd /home/salariosbrasil/consulta-ninja
#git pull
pwd

This directory exists and even cd does not work ..

but your self test mkdir -p with the same directory name

#!/bin/bash
mkdir -p /home/salariosbrasil/consulta-ninja
cd /home/salariosbrasil/consulta-ninja
#git pull
pwd

It creates another directory with the same name. only with "?" in the end.

Myquestionis:

  • HowdoIcdwork?
  • Whydoesitcreateanotherdirectorywiththesamenamewith"?" in the end?
asked by anonymous 24.01.2017 / 20:40

3 answers

2

The problem was that I created the script in Windows and sent it to the linux machine to run .sh : D: D

I created the script in vi and funfou perfectly.

  

"Unix uses different line feeds and carriage returns so can not read the   file you created on Windows. Hence it is seeing ^ M as an illegal   character "

    
27.01.2017 / 17:39
3

The command cd within bash (.sh) runs under a subshell.

The action is executed successfully, but in the main shell it has no effect because it was executed in a different context.

A simple trick is to invoke. sh

We usually do this

> ./file.sh

Well, just add the dot command with a space at the beginning:

> . ./file.sh

Alternatively, you can change dot to source

> source ./file.sh

The command . (dot / period) is a synonym for the source command. This command loads routines / functions from a file into the current shell.

Run in a new shell: ./file.sh

Returns execution in the current shell: . file.sh

    
25.01.2017 / 17:49
0

Maybe it could be a security level issue ... Have you ever taken a look at whether the user is running the script without permission to read the directory?

  

I use this routine in the company:

#!/bin/bash

make-dir(){
  sudo mkdir /solinftec
  sudo mkdir /solinftec/bin
  sudo mkdir /solinftec/log
  sudo mkdir /solinftec/sgpa-api
}

make-dir

Also check out how this flag works in your distro, use Fedora, and with me this does not happen.

  

mkdir --help

Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.

Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'
    
25.01.2017 / 12:03