タグ付けされた質問 「zsh」

Zshは、多くの高度なコマンドラインとスクリプト機能を備えたシェルです。

2
bashおよびzshにおける&& vs&の優先順位
この質問に答えると、bashとの動作に非常に面白い(そして微妙な)違いがあることがわかりましたzsh。 でbash: romano@RRyS:~$ pwd /home/romano romano@RRyS:~$ alias x="cd /bin && ./echo A >/dev/null &" romano@RRyS:~$ x [1] 16611 romano@RRyS:~$ pwd /home/romano ご覧のとおり、エイリアスの実行はxサブシェルで実行されるため、現在のディレクトリは変更されません。 にないzsh: [romano:~] % pwd /home/romano [romano:~] % alias x="cd /bin && ./echo A >/dev/null &" [romano:~] % x [1] 16744 [1] + 16744 done ./echo A >/dev/null 1& …
9 bash  shell  zsh 

3
(関数の)2番目の引数のZshオートコンプリートルールを既存のコマンドのルールに設定するにはどうすればよいですか?
私が持っているカスタムZshの機能をg: function g() { # Handle arguments [...] } その中で、Gitコマンドを実行する短い引数を処理します。例えば: g ls # Executes git ls-files ... g g # Executes git grep ... オートコンプリートルールを短い引数のGitのルールに設定できるようにする必要がありますが、これを行う方法がわかりません。 たとえば、次の引数が得られるg ls <TAB>ルールをタブ補完する必要があります。git ls-files <TAB>git ls-files $ g ls --<TAB> --abbrev -- set minimum SHA1 display-length --cached -- show cached files in output --deleted -- …
9 zsh  autocomplete  git 

1
Zshオートコンプリートで完全な関数を提案(_git _vimなど)
zshコマンドに対する完全な提案をどのように行っているかについて、少し不快です。 インストールしていないコマンドの先頭を入力して押すtabと、インストールされている補完機能が表示されます。 実行したいのですvimが、インストールされていないと表示され_vimます。 これをオフにする方法はありますか?または、セットアップで何か間違ったことをしましたか? 私のすべてのドットファイルはで公開されていgithub.com/henrikbjorn/castleます。

1
ls -l --group-directories-first(シンボリックリンクにも作用)
lsオプションを指定する--group-directories-firstと、ディレクトリが一番上に表示され、出力がlsきれいになります。 ls -l --group-directories-first ただし、symlinks実際symlinksにはディレクトリに対するには作用しません。使用する可能性があります ls -l -L --group-directories-first これは両方の種類のディレクトリを上にリストしますが、適切なディレクトリとシンボリックリンクされたディレクトリを区別しないため、やはり混乱を招きます。 ls通常のディレクトリとは区別しながら、シンボリックリンクされたディレクトリを上に表示できますか? 編集: 私はを使用していbashます。
9 bash  zsh  directory  ls  symlink 

1
zsh補完を変更して、プロンプトの上に補完を配置します
私は長年のtcshユーザーで、ついにzshを試すことにしました。私は補完機能をいじっていますが、値が多い可能性がある補完機能のタブを押すと、プロンプトの下に補完オプションが表示され、プロンプトが下部から押し出されます。端末の。TCSHは古いプロンプトを残し、下の新しい行に補完を出力してから、これまでに入力したプロンプトとコマンドを再出力します。 完了オプションがプロンプトの上に表示されるように、完了ロジックを変更する方法はありますか?

2
ソースファイルの構文チェックでbashを停止するにはどうすればよいですか?
zshとbashの両方から供給されるファイルに次のコードがあります。 if test $SHELLNAME = zsh ; then lss() { l -l ${1:-.}/*(s,S,t); } laf() { l ${1:-.}/.*(.); } lad() { l -d ${1:-.}/.*(/); } lsw() { l -ld ${1:-.}/.*(R,W,X.^ND/); } fi SHELLNAMEあるzshシェルはzshのある場合とbashシェルはbashのであれば。 上記の各関数には、zshでは機能するがbashでは機能しないコードが含まれています。 このファイルを入手すると、次のエラーが表示されます。 bash: <filename>: line 67: syntax error near unexpected token `(' bash: <filename>: line 67: ` …
9 bash  zsh 

1
同じ名前の既存のコマンドを呼び出す関数をzshで作成するにはどうすればよいですか?
zsh関数自体と同じ名前の既存のコマンドを呼び出す関数をどのように記述できますか?たとえば、私はこれを試して私の質問を説明しました: function ls { ls -l $1 $2 $3 } で実行するとls *、次のようになります。 ls:1: maximum nested function level reached これは関数が再帰的に呼び出されているためだと思います。どうすればそれを回避できますか? これは大まかな例であり、この場合はエイリアスで十分ですが、エイリアスが適切でないより複雑な例があるため、関数を作成する必要があります。
9 zsh  function 

3
Zsh:実行されたコマンドを自動的に変更
最近、MacPortsを介してgrc(汎用カラーライザー)をシステムにインストールしました。これにより、デフォルトではサポートしていない多くのコマンドのカラー出力を取得できます(下のスクリーンショットを参照)。 grcを自動的に使用したいのですが、特定のコマンドではなく、すべてのコマンドに対して使用します。シェルとしてzshを使用しています。 基本的に、実行するときは常にcommand -parameter 1 2 3として自動的に実行されるようにしたいと思いgrc command -parameter 1 2 3ます。grcに色を付けるためのコマンドをどんどん追加しているので、 エイリアス、たとえばtraceroutealias to を使用するつもりはありませんgrc traceroute。 .zshrcのpreexecおよびprecmd構成を調べましたが、探しているものを実現する方法が見つかりませんでした。
9 terminal  zsh  osx 

1
ソフトウェアがインストールされているかどうかを(スクリプトから)検出する最良の方法は何ですか?
以前は、さまざまwhichなプラットフォーム(LinuxとSolaris vx。OS X)でコマンドからの出力が異なることに不満を感じていました。異なるシェルが問題に関与している可能性もあります。 typeより良い代替案として提案されてきましたが、それはどれほどポータブルですか? 過去に、which実行したさまざまなユースケースの出力を解析して処理する関数を作成しました。それらは私が使用するすべてのマシンで動作するため、私の個人用スクリプトには問題ありませんが、他のユーザーが使用するためにどこかに投稿するソフトウェアには、これは非常に信頼できないようです。 考えられる例を1つだけ挙げると、bashとzshがマシンで使用可能かどうかをスクリプトから検出し、zshが存在する場合はzshを使用し、zshが存在せず、bashで十分な場合はbashを使用する必要があるとします。特定のバグがないバージョン。スクリプトの残りのほとんどは、BourneシェルまたはRubyなどですが、これはzshまたは最近のバージョンのbashのいずれかで行う必要があります(AFAIK)。 typeプラットフォーム間で利用できることを期待できますか?which特定のソフトウェアがインストールされているかどうかの質問に簡単かつ一貫して回答できる他の方法はありますか? (もしあなたが私が与えた例に特に関連した考えを与えたいならそれは素晴らしいですが、私は主に一般的なケースについて尋ねています:特定のものが特定のマシンにインストールされているかどうかを調べる最も信頼できる方法は何ですか? ?)
9 bash  zsh  standard  which 

2
GNU画面にタイトルを強制する
デフォルトでは、スクリーンセッションのタイトルは、最後に入力されたコマンドの名前です。これは私には問題ありませんが、場合によっては変更したいことがあります。私は、コマンドを知っているCtrl- A Aが、それだけで次のコマンドまでのタイトルを変更し、私は私がそうでなければ決定するまで、それはそこに滞在したいと思います。 編集:これ はpreexec私が見つけた機能です.zshrc if [[ "$TERM" == "screen" ]]; then local CMD=${1[(wr)^(*=*|sudo|-*)]} echo -n "\ek$CMD\e\\" fi

1
.zcompdumpファイルの個別のパス
.zcompdump-*ファイルはダンプされた構成ファイルであり、完了を高速化し、安全に削除できることを理解しています。ホームディレクトリが乱雑になるため、別の場所に保存します。そうするための良い方法は何ですか? ZDOTDIR変数を使用するオプションがあることはわかっていますが、その場合、すべてのzshドットファイルをその場所に配置する必要があります。.zcompdumpファイルを別の場所に保存したいだけです。
9 zsh 


5
現在のシェルインタープリター名を*確実に*かつ*簡単に*取得するにはどうすればよいですか?
(コマンドラインからではなく)スクリプトまたはソースファイル内から現在のシェルの名前を取得する簡単で信頼性の高い方法を探しています。私はちょうどそうすることを期待していました$(basename "$SHELL")が、ログインシェルがzshあり、some_script.shに次のコードがある場合 this_shell=$( basename "$SHELL" ) echo "The Shell is $this_shell" echo "The Shell is $0" そして私はそれを実行しbash some_script.sh、それはまだ示していますzsh代わりにbash使用インタプリタがあるにもかかわらず/bin/bash。シェルの設計者が現在のシェルではなくデフォルトのシェルを表示するように選択した理由はわかりませんが、それが私たちが行き詰まっているようです。 他にも少し似た質問がありますが(こことここ)、その答えは多くの点で不十分です。 多くの場合、ユーザーが現在使用している対話型シェルを把握しようとしていると想定しますが、それはおかしいです。シェルかを決定することができるようにどこでも実行することができ、私の必要性のコード-私はにコマンドを入力してるシェル知っている、それが使用されます。 彼らはしばしばいくつかの異なることを試みます-再びあなたがコマンドラインにいて、あなたがbashを使用していることを学ぶまでただいじくり回すことができるかのように-しかし、私はすべてのコンテキストで信頼できる単一のものが必要です。 彼らはしばしばのようなスクリプトから全く役に立たないものを与えecho $0ます。上記のスクリプトに示すように、これは失敗します。(はい、それはインタラクティブなシェルコマンドラインで機能しますが、なぜあなたが使用しているシェルを知らないのですか?) 彼らは時々(私の限られたテストでは)のような正しい情報を含むコマンドを提供しますがps -p $$、クロスプラットフォームでクロスシェル互換のsed / awkコマンドが不足しているため、パイプを介してシェル名のみを取得し、付随する他の情報を無視します乗る。 彼らは次のように、シェルのみのカップルで動作するものが含まれる$BASH_VERSIONと$ZSH_VERSION。私はそのような可能な限り多くのシェルとしてサポートしたいですfish、csh、tcsh。 私はどのように行う、確実かつ正確に検出任意の 現在のシェルを?私は、プラットフォーム間で、スクリプト内で、そして可能な限り多くのシェルで機能する何かを探しています1。 更新:私がこの質問を投稿したとき、私はこの情報を提供するためにシェルに組み込まれたいくつかの機能があると予想しましたが、そうではないようです。現在、シェルの外の何かに依存することは避けられないように思われるので、クロスプラットフォームソリューションを求めていることをより明確にする必要があります(上記の他の回答への私の反対には暗示されていますが、そうしないと簡単に見落とされる可能性があります)質問を注意深く読んではいけません)。 Update 2Stéphaneの回答がLinuxのみではないために、これがLinuxのみの質問の重複であるとまだだれもが信じている場合、私が求めているものと彼が提供したものとの違いは次のとおりです。(彼が書いたものは独創的であり、私はそれをノックしていませんが、それは私の問題を解決しないことに注意してください。) 私は何かを探していますシンプルかつ信頼性の高い、その (によって供給されることを任意のスクリプトや関数定義に追加することができ.zshrcたり.bash_profile、分岐または何でも)。 彼のスクリプトは、デフォルトのインタプリタによって常に解釈されて返されるため、インタプリタ名を呼び出し側のスクリプト/関数に渡す外部ユーティリティとして使用することはできません。これは私の目的に使用することを困難または不可能にします。可能であれば、それは非常に非常に困難であり、それを機能させるための解決策は答えに記載されていません。したがって、彼は私の質問に答えなかったため、それは重複ではありません。 あなたが何かを見たい場合になる仕事を、見とるGitHubの上ShellDetectiveを。これにより、SEに既に存在するものと、この質問が探しているものとの違いを簡単に確認できる場合があります(実際、この質問のニーズを満たすために作成されたもので、他では満たされていないものです)。 (PSあなたはにソース取得機能を想像し、このためのユースケースがあります信じることができない場合.zshrc、.bash_profileまたは.profile使用されているものを、サーバーに依存し、どのようなシェルそれが利用可能です。彼らはシェバング行を持っていないので、彼らが調達している。彼らは、どのシェルでも動作する場合に最も便利ですが、動作方法を知るために、どのシェルにいるかを知る必要がある場合もあります。) 1伝統的な意味でのシェルではない「シェル」には関心がありません。誰かが自分で書いたシェルについては気にしていません。私だけに関係してる本当のシェル実際に野生で発生し、そしてその誰か多分彼らはちょうど彼らが好きなシェルいくつかのサーバにログインをインストールすることはできませんれているときに使用する必要がある場合があります。
9 bash  shell  zsh 

3
シェル全体のバックスラッシュの処理
どのようにechoしてprintf御馳走バックスラッシュでzsh、bashおよび他のシェル? 下ではzshの私は、次の動作を取得します: $ echo "foo\bar\baz" foaaz $ echo "foo\\bar\\baz" foaaz $ echo 'foo\bar\baz' foaaz $ echo 'foo\\bar\\baz' foo\bar\baz 下ではbashの、物事はもう少し一貫性のあるように見えます。 bash$ echo "foo\bar\baz" foo\bar\baz bash$ echo 'foo\bar\baz' foo\bar\baz bash$ しかし、もっと具体的に:どのように私は、次のようなバックスラッシュを含む文字列渡すことができ\\foo\bar\somethingました: echo printf print まったく同じ文字列を取得しますか?(zshとbash)? 次に、zshの関数の別の実験を示します。 function foo { echo -E '$1' } $ foo \\here\is\some\path $1 どうすれば印刷するだけ\\here\is\some\pathですか? 更新(注:これは現在、Stephaneのコメントで回答されています) 私はzsh 5.0.2で以下を試しました: function …
9 bash  shell  zsh  quoting 

3
zshのエイリアスとbashのエイリアスの違い
調べてみましたが、決定的なものは見つかりませんでした。zshのエイリアスコマンドとbashのエイリアスコマンドに違いはありますか?そうでない場合は、2つのシェル間で一連のエイリアスを共有して、意図したとおりに機能することを期待できるということですか?
9 bash  zsh  alias 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.