2017-03-06 11 views
1

私はエイリアスの取得に問題があります。それは本当に特殊なケースです。私が持っているファイルtab1.shで.shスクリプトから新しい端末を開いた後に、.shスクリプトのソースが機能しない

#!/bin/bash 
    gnome-terminal --tab --title="Tab1" -e "./tab1.sh" --tab --title="Tab2" -e "./tab2.sh" 

::非常に似ていますtab2.sh

#!/bin/bash 
    ls 
    . ~/.my_aliases 
    echo "done" 
    exec bash 

ファイルを、私はopen_new.shを使用して2つのタブで新しいターミナルウィンドウを開きます。 2行目と4行目はうまく動作しますが、3行目はうまく動作しません。 'lll'エイリアスを使用しようとすると 'bash:lll:command not found'と表示されます。次に、3行目のコマンドを端末エイリアスに直接入力すると、作業が開始されます。

私は多くの異なる解決方法を試しましたが、それでも対応できません。たとえば、私が調達する前にこのような何かを試してみた:

shopt -s expand_aliases 

私はこの試みた:

source ~/.my_aliases 

をし、また、私が試した:

#!/bin/bash -i 

のことができる人です助けて? 多分私は2つのことを言及する必要があります:私はrootユーザーではない、私は通常の方法でエイリアスでそのファイルを調達することに何の問題もない。

ありがとうございます。

+0

tab1.shで 'exec bash'が必要なのはなぜですか?それは問題のようです。 – codeforester

+0

私は 'exec bash'を追加しないと、tab1.shの実行が終了したら何も入力することができません。 – pykaczka

+1

'exec'は現在のシェルを新しいプロセスで置き換えます。その新しいプロセスがシェルであるという事実は、エイリアスがシェルに転送されることを意味しません。 – chepner

答えて

1

私はここで質問をする前に3日間答えを探していました。そして今、他の誰かがこの問題に苦しんでいたら、私が共有したい答えを見つけました。

#!/bin/bash 
gnome-terminal --tab --title="Tab1" -e "bash --rcfile ./tab1.sh" --tab --title="Tab2" -e "bash --rcfile ./tab2.sh" 

ファイルtab1.shで:ファイルopen_new.shで

. ~/.bashrc 
. ~/.my_aliases 
ls 
echo "done" 

説明:あなたは、他の多くのコマンドを置くことができるファイルに

--rcfile File #execute commands from File instead of the standard personal initialization file ~/.bashrc 

。すべてのbashコマンドが私のために働いた。私は解決策を見つけました:

man bash 
0

私はあなたの~/.bashrcに以下を追加提案:

source ~/.my_aliases

この方法は、すべての新しいタブがあなたのエイリアスを継承します。

+0

私はrootユーザーではないので、このファイルを編集できません。 – pykaczka

+1

すでに分かっているように、 'exec bash'は新しいbashプロセスを生成します。以前はロードされた別名を継承しません。 –

+1

' .bashrc'はユーザ設定ファイルなので、通常の条件で編集権限が必要です。結局のところ、あなたの家の中にあります!それにかかわらず、 '〜/ .bash_aliases'を使うこともできます。同じ効果があります。 –

関連する問題