2016-04-11 8 views
3

別名を~/.config/fish/config.fishに定義し、~/.config/fish/functionsで定義された関数をrootユーザーにも使用できるようにするにはどうすればよいですか?魚のシェルのユーザーとルートの別名と機能

/root/.config/fishにシンボリックリンクしていませんでした。さらに、私はまた、現在機能していないsudoで自分の関数とエイリアスを使用できるようにしたいと思います。

あなたはどうしていますか?

答えて

2

私は最初の問題(私はrootユーザーにとって便利な機能はありません)の解決策はありませんが、2番目の関数(sudoの引数として機能しない関数)は次のように解決できます。ラッパー関数:

function sudo 
    if functions -q $argv[1] 
     set argv fish -c "$argv" 
    end 
    command sudo $argv 
end 

問題がsudoは、外部コマンドであることはもちろんである(通常は/ usr/binに/ sudoの時)関数定義のような魚の内部について知ることができません。したがって、関数名を与えると、このラッパーは魚を呼び出します。もちろん、これは新しい魚のセッションを開始するので、cdのようなものは、メインの魚のセッションの状態を変更しないので有用ではありません。

+0

クール、ありがとうございます。うまく動作します。私はそれが役に立つ事だと思う。 –

+0

私はこの機能が気に入っていますが、スペースを含む引数を扱わないことは危険です。例えば、魚の 'ls'も関数です。 'sudo ls" My File "を実行すると、MyとFileというファイルが別々に検索されます。 –

1

私はconfig.fishへのシンボリックリンクを使用し、完全に動作します。あなたはパーミッションをチェックしましたか?あなたは、ディレクトリの/ etc /魚/のために使用することができ、より新しいバージョンでは

777 lrwxrwxrwx 1 root root 35 Dez 21 2015 /root/.config/fish/config.fish -> /home/lara/.config/fish/config.fish 

システム全体の設定

私はエイリアスで解決sudoのに問題:

# -E just preserv env. It's not really 
# necessary, but may be useful. 
function sudo; command sudo -sE $argv; end 

sudoの男からページ:

-s、 - シェル SHELL環境変数で指定されたシェルを実行しますtまたは呼び出すユーザーの パスワードデータベースエントリで指定されたシェル。コマンドが指定されている場合は、シェルの にシェルの-cオプション を実行するために渡されます。コマンドを指定しないと、対話型シェルが実行されます。

関連する問題