2011-01-31 6 views
1

私のLinuxの宿題では、ユーザーが〜/ tareas/sesion_3にいる場合にのみ実行するスクリプトを書く必要があるので、最初にcd /〜/ tareas/sesion_3を入力してからスクリプトコマンドを実行する必要があると仮定します"あなたは/〜/ tareas/sesion_3にいません"というメッセージが表示されます。スクリプトでは、ディレクトリを増やす必要があり、そのディレクトリに作成することができます。BASHスクリプトを特定のディレクトリでのみ動作させる方法は?

どのようにすればいいですか?

皆様のお役に立てれば幸いです。

+0

指定されたディレクトリの_child_ディレクトリ内にある場合は、動作する必要がありますか?たとえば、 '/ tareas/sesion_3/bin'? –

+0

スクリプトが必要なフォルダ自体に切り替えることができない理由はありますか? – Raceimaztion

+0

@Raceimazation - これは宿題の問題で、しばしば学生が理解を深めるためのことをやっている(必ずしも賢明なプログラムに終わらない)。 –

答えて

4

$PWDを使用すると、スクリプトが実行された親ディレクトリを確認できますが、既に展開されているのは~です。私の答えは

if [[ "$PWD" == "/home/tareas/session_3" ]]; then 
    # do stuff if true 
else 
    # do stuff if false 
fi 
0

#!/bin/sh 

TARGET_DIR = "~/tareas/sesion_3" 

function do_something(){ 
    #do something 
} 

function do_something_v2(){ 
    #create some dirs 
} 

if [ `pwd` == "$TARGET_DIR" ] ; then 
    do_something 
else 
    do_something_v2 

あなたがいるかどうかを確認する必要がある場合、私は

+0

このスクリプトは動作しません。 'pwd'は完全なパス名を使用するので、'〜 'と一致しません。また、改善のための2つのコメント。 1)外部コマンド 'pwd'を呼び出すのではなく、' $ PWD'環境変数を使います。2) 'bash'の代わりに' sh'を使ってPOSIXを保つつもりなら、 '= '' test ''と文字列を比較するとき '='しかしむしろ '=' – SiegeX

0

^_ ^それはあなたの

を助けることができると思いますようだから、何かを行うことができます指定されたディレクトリのの内部にがありますが、その中に子ディレクトリがある可能性があります。grepは、持っているのは良い友達です:

echo `pwd` | grep ^/starting/directory >/dev/null || { 
     echo "You aren't in the proper place .." 
     exit 1 
} 

働くことの例:

[email protected]:~$ echo `pwd` | grep ^/home/tpost >/dev/null || echo nope 
[email protected]:~$ echo `pwd` | grep ^/home/foo >/dev/null || echo nope 
nope 

をカラット(^)は、そのあなたが提供するものをと始まる行を一致させるためにはgrepに指示します。

+0

これは、シェルの構文で、2つの外部バイナリ、 'pwd'と' grep'を呼び出す必要なく行うことができます。 '[$ PWD/==/home/tpost/*] 'のように' * 'を使用してください。 – SiegeX

+0

なぜ" echo $(pwd) "?単にpwdを直接起動してください。すなわち「pwd | grep ...」と表示されます。 (注:バッククォートはコメントに表示されていないので、$()に置き換えました) –

+0

@Williamちょうどバックスラッシュをエスケープするように、\ echo – SiegeX

関連する問題