2017-05-17 3 views
-1

私はディレクトリを上に移動できるbashスクリプトを作成しようとしています。私はこのスクリプトを作成しましたが、実行すると何も実行されません。私はそれにprintステートメントを追加しようとしたが、それは動作します。私はこれを実行する必要がある特定の方法はありますか? スクリプト:私は理解していればディレクトリスクリプトを作成しますか?

#!/usr/bin/zsh 
DIR=$1 
NUM=$PWD 
for ((c=1; c <= DIR; c++)) 
do 
    echo $NUM 
    cd $NUM/.. 
done 
+3

スクリプトはサブプロセスで実行されます。環境に対する変更は、呼び出し元のシェルには影響しません。 – Barmar

+1

実行可能なスクリプトではなく、[関数](http://zsh.sourceforge.net/Doc/Release/Functions.html)にすることはできますか? –

答えて

1

は、ディレクトリツリー内のディレクトリを上に移動したいです。


これは、スクリプトでは、.bashrcのようでエイリアスますalias up1='cd../' alias up2='cd../../'を、あなたはそれを複数回スクリプトのみクレート存在しないentrysを実行している場合ように、私は深さ9を制限します。あなたが深さを与えてからスクリプトがこのエイリアスを管理するなら、エントリを削除させることができますか?

あなたが探しているスクリプトではなく、独自のインスタンスで実行しているスクリプトから、現在のシェルに影響を与えることはできません。また、このスクリプトがエイリアスを作成した後で、再度認証するか新しいシェルを開く必要があります。その時点から.bashrcからエイリアスエントリを削除しない限り動作します。

#!/bin/sh 

[[ ! $# == 1 ]] && echo "Only one parameter accepted" && exit 1 
[[ $(echo $1 | grep -c ^[1-9]$) -eq 0 ]] && echo "parameter must be between 1 and 9" && exit 1 

cdcommand="" 
for ((i = 1 ; i <= $1 ; i++)); do 
     cdcommand=$(echo $cdcommand | sed 's/^/\.\.\//g') 
       [[ $(cat ~/.bashrc | grep -c "alias up$i='cd $cdcommand' ") == 0 ]] && 
       echo "alias up$i='cd $cdcommand' " >> ~/.bashrc 
done 
+0

私は "up 2"を入力するスクリプトを作っています。ディレクトリ内で上に行くので、 "up 2"を実行すると、/ blah/blah/yoから/ blahに移動します/ – TheGuyWhoCodes

+1

@TheGuyWhoCodes:あなたの要件を見るようにQを編集してください。誰かがこの答えを書く時間を無駄にしているので、X人はそれを読んでいる時間とあなたのコメントを無駄にしています。 http://stackoverflow.com/help/how-to-ask、http://stackoverflow.com/help/dont-ask、http://stackoverflow.com/help/mcveを読んで[ツアー]( http://stackoverflow.com/tour)よりQを投稿してください。がんばろう。 – shellter

関連する問題