|
|
|
|
||||||
| comp.unix.shell Using and programming the Unix shell. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Hello.
I am very new to bash scripting and was hoping you could me out a bit. I am trying to create a bash script (but I'd prefer an alias) which changes the directory and then lists the files in that direcotry. This is what I came up with: #!/bin/sh cd $1; ls; This does not work and I believe this is due to the script starting a new "sh" shell and then changing the directory in THAT shell. How should I do this? -- Deniz Dogan |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Dear Deniz,
On May 31, 11:10 am, Deniz Dogan <kristn...@nospam.com> wrote: > I am very new to bash scripting and was hoping you could me out a > bit. I am trying to create a bash script (but I'd prefer an alias) which > changes the directory and then lists the files in that direcotry. This > is what I came up with: > > #!/bin/sh > cd $1; > ls; > > This does not work and I believe this is due to the script starting a > new "sh" shell and then changing the directory in THAT shell. How should > I do this? Bash aliases do not support parameters (i.e., the $1). You could use a function instead: $ function cdls { if [ -d $1 ] ; then cd $1; ls; else echo "Error: '$1' is not a directory" 1>&2 ; fi } $ cdls foo Error: 'foo' is not a directory $ cdls doc [snip] see bash(1) in the FUNCTIONS section for more details Cheers, Matteo |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Teo wrote:
> Dear Deniz, > > On May 31, 11:10 am, Deniz Dogan <kristn...@nospam.com> wrote: >> I am very new to bash scripting and was hoping you could me out a >> bit. I am trying to create a bash script (but I'd prefer an alias) which >> changes the directory and then lists the files in that direcotry. This >> is what I came up with: >> >> #!/bin/sh >> cd $1; >> ls; >> >> This does not work and I believe this is due to the script starting a >> new "sh" shell and then changing the directory in THAT shell. How should >> I do this? > > Bash aliases do not support parameters (i.e., the $1). You could use a > function instead: > > $ function cdls { > if [ -d $1 ] ; then > cd $1; > ls; > else > echo "Error: '$1' is not a directory" 1>&2 ; > fi > } > $ cdls foo > Error: 'foo' is not a directory > $ cdls doc > [snip] > > see bash(1) in the FUNCTIONS section for more details > > Cheers, > > Matteo > Thank you for your response, Matteo, it is highly appreciated! -- Deniz Dogan |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
On 2007-05-31, Deniz Dogan wrote:
> Hello. > I am very new to bash scripting and was hoping you could me out a > bit. I am trying to create a bash script (but I'd prefer an alias) which > changes the directory and then lists the files in that direcotry. This > is what I came up with: > > #!/bin/sh > cd $1; > ls; > > This does not work and I believe this is due to the script starting a > new "sh" shell and then changing the directory in THAT shell. How should > I do this? A script is executed in a new process, and it cannot change the environment of the calling shell -- unless you source it: .. /path/to/script What you want is a shell function. Place this in your ~/.bashrc: cdls() ## use whatever name you like { builtin cd "$1" && ls || printf "Could not change directory to %s\n" "$1" } -- Chris F.A. Johnson, author <http://cfaj.freeshell.org/shell/> Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress) ===== My code in this post, if any, assumes the POSIX locale ===== and is released under the GNU General Public Licence |
|
![]() |
| Outils de la discussion | |
|
|