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

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

1
zshの配列とループ
でループと配列操作を学習しようとしていますzsh。 たとえば、zshに2つの配列があり、未知の要素数が同じで、それぞれにパスのリストが含まれているとします。 LOCAL_ARRAY=($LOCAL_PATH_1 $LOCAL_PATH_2 $LOCAL_PATH_3) REMOTE_ARRAY=($REMOTE_PATH_1 $REMOTE_PATH_2 $REMOTE_PATH_3) 両方の配列を共通のインデックスで同時に反復処理して、次のようなことができるようにしたいと思います。 cd $LOCAL_PATH_i hg pull $REMOTE_PATH_i 各反復で。zshでこれを行うにはどうすればよいですか? また、zshのドキュメントでループ制御と配列を検索しましたが、ほとんど成功しませんでした。zshのループ、配列などの基本を紹介する優れたチュートリアルはありますか?bashやシェルスクリプトの経験はほとんどないが、プログラミングの経験がある人のために何かありますか?
9 zsh  array 


2
zshでの関数の呼び出しコンテキスト:bash `caller`と同等
bashでは、私は書くことができます: caller 0 呼び出し元のコンテキストを受け取ります: 行番号 関数 スクリプト名 これはデバッグに非常に役立ちます。与えられた: yelp () { caller 0; } 次に、yelpどのコード行に到達しているかを確認するために書き込むことができます。 私が実装することができますcaller 0でbashのように: echo "${BASH_LINENO[0]} ${FUNCNAME[1]} ${BASH_SOURCE[1]" どのように私は同じ出力を得ることができますcaller 0ではzsh?

2
lsは「一致なし」を無視します
と呼ばれるフォルダ内のfoldername、拡張子がtest、atestまたはのすべてのファイルを一覧表示しますbtest。 私の当面の考えは走ることでした ls ./foldername/*.{a,b,}test 拡張機能atestに何もない場合を除き、これは正常に機能しますzsh: no matches found: ./foldername/*.atest。その場合、エラーが発生します。 このエラーを無視して、存在するファイルを印刷する方法はありますか? これはZSHとBASHの両方で機能するために必要です。

2
ZSHでの魚のような引数補完検索
私は魚をいじり回していて、この便利な行動に気づきました 「」と入力wget -<tab><tab><tab>すると、インタラクティブメニューが表示されました。しかし、入力すると、引数自体の説明を検索しました。私はこれをzshで試してみましたが、このメニューに入力しても、インタラクティブなプロンプトに戻るだけでした。zshで同様の機能を実現する方法はありますか?

1
プログラムでzsh補完にアクセスするにはどうすればよいですか?
zshには補完システムがあり、タブを押すとアクティブになります。 llama@llama:~$ git st<Tab> Completing main porcelain command stash -- stash away changes to dirty working directory status -- show working-tree status Completing plumbing internal helper command stripspace -- filter out empty lines 私が理解できたのは、これがスクリプトから来ているということです。/usr/share/zsh/functions/Completion/Unix/_gitここ_gitで、完了コマンドが呼び出されています。 補完関数の名前(など_git)がわかっているとすると、特定の文字列を入力してタブを押した場合にどうなるかを出力するにはどうすればよいでしょうか。基本的に、私はexの入力を取得しようとしています。git st上記の出力を取得します(プログラムから、スクリプトから)。 これに関して bash に関する他の多くの既存の質問がありますが、zshでこれを達成する方法を説明するものは何も見つかりませんでした。

1
zsh I / Oリダイレクト:リダイレクトしてからパイプします。何が起こっている?
誰かがこのコマンドで何が起こっているのか説明できますか? echo foo >&2 | grep foo Zsh(5.0.2)はfoo2回印刷します。これらのコマンドを実行してから、1つはstdoutに、もう1つはstderrに見えます。 { echo foo >&2 | grep foo } >/dev/null そして: { echo foo >&2 | grep foo } 2>/dev/null どちらもfoo一度だけ印刷します。

4
ブレース展開中に生成された引数間のスペースを抑制するにはどうすればよいですか?
次のコマンドを使用して、テストするURLのリストを作成しました。 echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt 残念ながら、urls.txtそれぞれに追加されたURLの前にはスペースがありました(もちろん、最初のものを除きます)。それがなぜ起こったのか理解しており、sed式をパイプ処理することでそれを取り除くことができることを理解していますが、代わりにそれを抑制する方法があるかどうか知りたいです。(それはばかげて、見た目が悪いように見えるかもしれませんが、多くの人々が「猫を虐待しない」と感じるので、好みと同じです。) 私が試した、二重引用符抑制単語分割にするので、それは何の-行くんでした、が、それはあまりにもブレース展開を抑制しました。 IFSを空の文字列に変更しようとしましたが、うまくいきませんでした。 IFS='' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt また、改行に変更しませんでした。 IFS='\n' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt

1
OS Xおよびその他のUnicesの/ etc / paths
される/etc/pathsことにより、読み、すべてのシェル私はOS Xで動作していること?たとえば、zshを使用すると、解析/etc/pathしてデータが読み込まれ$PATHますか? OS Xが入力するシーケンスは正確には何$PATHですか?他のUnicesとは異なる方法ですか?
8 osx  zsh  path  etc 

2
サブシェルのプロンプトを変更する方法
私はとりわけ、サブシェルを作成する単純なスクリプトを作成しようとしています。 #!/bin/sh # setup "${@:-$SHELL}" # teardown 問題は、デフォルトのプロンプトを変更する必要があるためです。たとえば、次のようにします。 $#デフォルトのシェル $ ./myscript(myscript)$# サブシェル (myscript)$ exit $ 私は変更しようとしていないPROMPTとPS1、これらの作品のどれも。どうやってやるの? PS .:可能であれば、BashとZSHの両方で機能するソリューションが必要です。
8 bash  zsh  prompt 

1
グロブパターン(zsh)でパラメーター置換を使用する方法
一部のサフィックスで終わる一連のファイルを処理したいので、次のzshスクリプトを記述しましたが、機能しませんでした。 EXT=(.jpg .png .gif) EXT=${(j.|.)EXT} # EXT becomes '.jpg|.png|.gif' for f in *($EXT); do # should become '*(.jpg|.png|.gif)' but failed process-one-file $f done なぜ動作しないのですか?パラメータ置換とグロブパターンを混在させるにはどうすればよいですか?
8 zsh  glob 

4
異なるホストにSSH接続するためのBashオートコンプリート機能
私はいつもいつも利用しているサーバーの大きなリストを持っsshています。使用してどのような方法があるbashか、zsh私はホスト名とbashの自動補完のリストを保つことができるように、ファイルを通過し、私がホスト名の最初の数文字を入力するたびにこれらの文字で始まるボックスの示唆を与えます。
8 bash  ssh  zsh  autocomplete 

2
zshでタブ補完のタイムアウトを指定するにはどうすればよいですか?
Zshの補完機能は、この機能を除いて素晴らしいです。多くのファイル/ネットワークフォルダーがあるフォルダーで完了しようとすると、数分かかり、このエラーが出力されます。 example.com:~$ ls /path/to/some/bigFolder/[TAB] zsh: do you wish to see all 620 possibilities (124 lines)? 代わりに、zshが自動補完を試行しないタイムアウトを指定する方法はありますか?検索もキャンセルできません。

1
chshまたは管理者権限なしでデフォルトのシェルを変更する
私はこのスレッドで次のスニペットを見ました:デフォルトのシェルとしてcshからbashに変更する方法 sleep 2 if (-x /usr/local/bin/bash) then exec /bin/sh -c '. ~/.profile; exec /usr/local/bin/bash' endif 私の理解では、このスニペットを~/.loginそこに配置するとbash、ログイン時に呼び出されます。 同様のスニペットを使用して、zshログインに使用するデフォルトのバージョンとは異なるバージョンを呼び出したいという同様の状況があります。この問題が発生する理由の一部は、選択できないためですでzsh許可されているオプションのの希望するバージョンで、chsh管理者権限がありません。 これとともに: 異なるバージョンのzshを切り替えるときに、上記のスニペットをどのように変更すればよいですか? exec上記のスニペットに2つのコマンドが必要なのはなぜですか?彼らは何をしますか?また、なぜ使用上のスニペットはありませんsh し、 bash(ユーザーが持つログインになっていますcsh)
8 shell  zsh  login  exec 

1
端末の特定の場所にあるバックグラウンドプロセスのstdoutを表示する
新しい端末が開かれるか、新しいログインが行われるたびに実行するコマンドがあります。 このプログラムは、コマンドプロンプトの前に配置される出力(色付き)を生成します。実行に数秒かかる可能性があり、それまでは(バックグラウンドで実行されない限り)端末を使用できません。 zshには既存のテキストを壊さずにターミナルを再描画する高度な方法があるので、ターミナルを使用する前にコマンドが完了するのを待つ必要がないように、このコマンドを実行する方法を知りたいのですが終了すると、最初からバックグラウンド化されていないかのように出力を印刷します。 実際には、私ができることを望みます: Command output: ... (running on background) me@computer: somecommand me@computer: someothercommand コマンドが完了すると、次のようになります。 Command output: * Output foo * Multiple lines bar * and some yada me@computer: somecommand me@computer: someothercommand プロセスをバックグラウンドで開始しようとしましたが、出力がきれいに表示されません。私は次のようなものを得ます: Command output: [2] 32207 me@computer: somecommand me@computer: someother * Output foo * Multiple lines bar * and …
8 terminal  zsh 

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