1

私は bash スクリプト ( gotodir.shと呼ばれる) を作成しており、いくつかの変数に応じて、スクリプトの過程でディレクトリを変更したいと考えていますcd /home/username/${FOO}/${BAR}

サブシェルでのみディレクトリが変更されたため、プロセスが終了したときにこれをそのまま実行しても機能しません。

私のシェルは tcsh です。(ええ、私は知っています... ここでは私の選択ではありません。) 私の.cshrcファイルで、キーワードgotodirgotodir.shにエイリアスしたいと思います。

.またはsourceプレフィックスを付けてスクリプトを実行すると、スクリプトが同じシェル (つまり、サブシェルではない) で実行されることを読みました。

私は.cshrcファイルに以下を入れようとしました:

alias gotodir . /home/username/bin/gotodir.sh

しかし、これはエラーになります:/bin/.: Permission denied.

私もsource代わりに使ってみました.

alias gotodir source /home/username/bin/gotodir.sh

しかし、これはエラーになります:if: Expression Syntax.

tcsh の実行中に bash スクリプトを使用してこれを行うにはどうすればよいですか?

4

1 に答える 1

3

tcsh からファイルを取得するsourceと、tcsh がコマンドを実行します。ファイルをスクリプトとして実行するの#!ではなく、シェル プロンプトで入力されたかのようにファイルからコマンドを読み取るだけなので、 はコメントとして無視されます。

あなたの使命は失敗する運命にあります。tcsh プロセスの現在のディレクトリを変更できるのは、tcshcdコマンドだけです。

ただし、少し曲げても構わない場合は、別のプロセスとして実行され、ディレクトリの名前をに出力するスクリプトを作成できますcd。次に、エイリアスを次のように設定します

alias gotodir 'cd `/blah/blah/thescript`'

補遺

引数を追加することは可能ですが、注意が必要です。エイリアス引数!:1は、最初の引数に展開する履歴展開のように見えます。しかし、引用符はキャラクターを保護しません!。エイリアスの作成中に展開されないようにバックスラッシュを付ける必要があるため、エイリアスの実行中にその作業を行うことができます。

alias gotodir 'cd `/blah/blah/thescript \!:1`'

スペースを含む引数とディレクトリを処理するには、追加の引用符が必要になる場合があります。

于 2013-07-19T01:13:52.583 に答える