ここにある答えを使用してみました:
シェルスクリプトで「cd」を実行し、スクリプトが終了した後もそこにとどまる方法は?
「source」コマンドを追加すると、「source」を実行するか、cshrc でコーディングされたエイリアスを使用してスクリプトを呼び出すかに関係なく、スクリプトの実行後もディレクトリは変更されません。
どんな助けでも大歓迎です!
ここにある答えを使用してみました:
シェルスクリプトで「cd」を実行し、スクリプトが終了した後もそこにとどまる方法は?
「source」コマンドを追加すると、「source」を実行するか、cshrc でコーディングされたエイリアスを使用してスクリプトを呼び出すかに関係なく、スクリプトの実行後もディレクトリは変更されません。
どんな助けでも大歓迎です!
以下に示すように、への呼び出しがサブシェル内で実行されてcd
いないことを確認してください。もしそうなら、これはうまくいかないでしょうsource
。
cd
サブシェルでのスクリプト#!/bin/bash
( cd /etc ) # thie exec's in a subshell
$ pwd
/home/siegex
$ source ./cdafterend.sh && pwd
/home/siegex
cd
ないスクリプト#!/bin/bash
cd /etc # no subshell here
$ pwd
/home/siegex
$ source ./cdafterend.sh && pwd
/etc
コマンドが意図したとおりに機能するためには、このスクリプト内のcdコマンドから「/bin/」を削除する必要がありました。これを削除すると、このスクリプトのサブシェルの問題が削除されます。また、lsコマンドでの「$ 1」のコーディングは、このコンテキストでは無効でした。