3

私は Stack Overflow で同様の質問をすべて見て、それらのドキュメントでたくさんのことを試しました。私の現在の試みは以下です。

私が達成しようとしているのは、コンピューター ユーザーに基づく異なる動作です。職場のコンピューターと自宅のコンピューターがあり、コマンドラインに「コード」を入力すると、自宅で入力したときとは異なるディレクトリに職場のコンピューターが移動するようにします。私はこれを試しました(私の仕事のユーザー名はafk、家はsfkです):

function code
    set result (dirh)
    if [contains "sfk" $result]
        cd ~/rails
    else if [contains "afk" $result]
        cd ~/code
    else
        echo $result
    end
end

現在、これは「不明なコマンドに Users/sfk/.config/fish/ が含まれています」という問題があります (これを入力すると、私の PWD は Users/sfk/.config/fish/ になります)。たぶん含むはリスト用だと思いますが、ドキュメントはこれについて特に明確ではありませんか? どうすればこれを行うことができるでしょうか?

編集

これを試してみたところ、エラーはなくなりましたが、最終的にelseケースになり、本来はそうではないため、dirh文字列にISが含まれているユーザーIS sfkが発生します。

function code
    set result (dirh)
    if test (contains "sfk" $result)
        cd ~/rails
    else if test (contains "afk" $result)
        cd ~/code
    else
        echo $result
    end
end
4

1 に答える 1

6

上記のコメントで述べたように、これがこの特定のユースケースに最適なソリューションです。しかし、誰かが何か他のことをしたい場合に備えて質問に答えるために。

containsリスト項目で完全に一致することは、あなたの言うとおりです。switch代わりに関数を使用できます。ワイルドカード マッチングをサポートします。

function code
    set -l result (dirh)

    switch $result
        case '*sfk*'
            cd ~/rails
        case '*afk*'
            cd ~/code
        case '*'
            echo $result
    end
end
于 2013-06-10T06:37:34.137 に答える