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

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

4
zshではなくbashでカットが失敗するのはなぜですか?
タブ区切りフィールドを含むファイルを作成します。 echo foo$'\t'bar$'\t'baz$'\n'foo$'\t'bar$'\t'baz > input 次の名前のスクリプトがあります zsh.sh #!/usr/bin/env zsh while read line; do <<<$line cut -f 2 done < "$1" 私はそれをテストします。 $ ./zsh.sh input bar bar これは正常に動作します。しかし、最初の行をbash代わりに呼び出すように変更すると、失敗します。 $ ./bash.sh input foo bar baz foo bar baz なぜこれが失敗しbashて動作するのzshですか? 追加のトラブルシューティング シバンの代わりに直接パスを使用envすると、同じ動作が生成されます。 echohere-stringを使用する代わりにでパイピングして<<<$lineも、同じ動作が生成されます。すなわちecho $line | cut -f 2。 使用するawk代わりに、cut 作品の両方のシェルのため。すなわち<<<$line awk '{print $2}'。

3
$ RANDOMのような「ジェネレータ」を実装する方法は?
特殊変数$RANDOMは、アクセスされるたびに新しい値を持ちます。この点で、一部の言語にある「ジェネレーター」オブジェクトを連想させます。 このようなものを実装する方法はありzshますか? 名前付きパイプでこれを実行しようとしましたが、「ジェネレーター」プロセスを終了せずに制御された方法でfifoからアイテムを抽出する方法が見つかりませんでした。例えば: % mkfifo /tmp/ints % (index=0 while ( true ) do echo $index index=$(( index + 1 )) done) > /tmp/ints & [1] 16309 % head -1 /tmp/ints 0 [1] + broken pipe ( index=0 ; while ( true; ); do; echo $index; index=$(( ... このようなジェネレータータイプのオブジェクトをzshに実装する他の方法はありますか? 編集:これは機能しません: #!/usr/bin/env …
10 zsh  fifo  ipc 

2
現在のプロセスをそのコプロセス/子で置き換えます
P「Hello」を受け取り、「Why?」を出力することを期待するプログラムがあります。機能を提供する前に。この機能は、「こんにちは」との会話を開始することが礼儀であることを認識していない他のプログラムによって使用されます。したがって、次のように機能するラッパーを記述したいと思いPます(zsh構文)。 coproc P print -p Hello # Send Hello to P read -pr line # Read what P has to say [[ "$line" = "Why?" ]] && Replace current process with the coprocess. echo Could not get P's attention. 使用するcatかddにReplace...一部(のようなものはcat <&p &; exec cat >&p)不要なバッファリングになります。私のオプションは何ですか?
10 shell  scripting  process  zsh 

4
「&&」の後の「&&」の前のコマンドを参照できますか
他にどのように質問を言うかわかりませんが、基本的にvagrant、VMを起動するようなコマンドを実行し、次にsshで次のように実行することがよくあります。 vagrant up && vagrant ssh 独自の関数またはスクリプトを作成する前vagrantに、コマンドの2番目の部分の部分を「再利用」する方法はありますか?
10 bash  zsh 

2
スクリプトの出力のコピーをファイルに送信する
Zshスクリプトがあり、出力をSTDOUTに出力したいが、その出力をディスク内のファイルにコピー(ダンプ)したいとします。 さらに、スクリプトは次のオプションで始まります set -o xtrace これにより、詳細になり、実行するコマンドが出力されます。この出力をディスク内のファイルにもキャプチャしたいと思います。 私が理解していることは ./my_script.sh > log.txt それは単にに送信さSTDOUTれlog.txtますが、ターミナルで出力も確認できるようにするにはどうすればよいですか? 私はZsh teeのMULTIOSオプションについて読みましたが、それらの使用方法はわかりません。 私がする時: ./my_script | tee log.txt 端末で出力を確認できますが、ファイルはlog.txtすべてをキャプチャしているようには見えません(実際にはほとんど何もキャプチャしていません)。

2
zshのローカル変数:zshでのbashの「エクスポート-n」に相当するもの
変数のスコープをシェルに含めようとしていますが、zshで子にそれを表示させません。たとえば、これを.zshrcに入力します。 GREP_OPTIONS=--color=always しかし、次のようにシェルスクリプトを実行すると、 #!/bin/bash echo $GREP_OPTIONS 出力は次のとおりです。 --color=always 私はそれをnullにしたいのですが(上のシェルスクリプトはGREP_OPTIONS変数をまったく見ないはずです)。 bashでは、次のように言うことができますexport -n GREP_OPTIONS=--color=always。これをzshでどのように実現しますか?


4
シェルスクリプト内のハイブリッドコード。変数の共有
この回答では、ターミナルのコマンドラインから複数行のPythonスニペットを実行する方法について説明します。入れ子になったインデントがあっても、答えはシェルスクリプト内でうまく機能することに気づきました。 #!/bin/bash some_text="Hello world" echo $some_text cat <<EOF | python - import sys; for r in range(3): print r for a in range(2): print "hello" EOF プリント: 0 hello hello 1 hello hello 2 hello hello ただし、シェルスクリプトとPythonスニペットの間で変数を共有するのに苦労しています。 python添え字の出力をbashスクリプトで収集するにはどうすればよいですか?(例:などの変数内$output)。 $some_textPythonスクリプトにbash変数(など)を渡すにはどうすればよいですか?
10 bash  scripting  zsh  python 

1
zsh補完:特定のディレクトリからファイル名を取得する
OK、少し背景:私はMacを使用し、CLIで可能な限り多くのことを行います。 特に、USBスティックcpやmvファイルを頻繁に差し込み、すぐに取り出し(アンマウントして切断)したいと思っています。これは通常、いくつかのキーストロークで実行できますが、マウントを解除するには(10.7では)空のデスクトップスペース(通常は少なくとも2スペース離れている)に移動してディスクを選択し、「command-e」を押す必要があります。率直に言って、このアンマウント手順は、数桁も、プロセスの中で最も時間がかかり、退屈な部分です。 次のように単純にタイプできるほうがはるかに自然で効率的です。 ej<tab> J<tab> 私のUSBスティックマウントが/ Volumes / Jeffersonにあると言います。私の6つのキーストロークから得られるものは次のとおりです。 eject /Volumes/Jefferson これはコマンドを実行するはずです: diskutil unmount /Volumes/Jefferson だから、私は素敵な小さな関数を書きました: eject() { diskutil unmount /Volumes/$1 } そして、それに伴う補完関数: compdef '_files -g "/Volumes/*"' eject ただし、これには問題があります。_filesこの関数は、完全なパスを生成します。これで、「eject」関数の行をに変更できdiskutil unmount $1、動作しますが、パスが/ Volumes /で始まるため、マウントポイント名の最初の文字を入力することができません。たとえば、と入力J<tabすると、PWD内のファイルのオートコンプリートが表示されます。/Volumes/J<tab>必要な補完を取得するには、入力する必要があります。 では、完全なパスを生成するのではなく、事前定義された特定の場所からファイル名を取得する補完関数はありますか? 私はこれを6回のキーストロークまで下げたいと思っています。
10 zsh  osx  autocomplete 

3
zshはemacsのようにコピーアンドペーストします
zshにはemacsに表示されるものがたくさんあることに気づきました。Ctrl +スペースで領域を選択して選択できます。zsh内にいる間は、emacsと同じようにコピーを作成できます。emacsでは、システムクリップボードを使用できます(以前はいくつかの追加構成が必要でしたが、これはそのままemacsで動作します)。zshでは、Cyを使用してクリップボードから貼り付けることができず、zshからシステムのクリップボードにコピーする場合も同じ問題があります。これを回避する方法はありますか?
10 zsh  clipboard 

2
zshタブ補完をキャンセル
完了した完了をキャンセルする方法はありますか?時々愚かにタブを押してターゲットをオートコンプリートし(純粋な怠惰からのみ)、自分で「インストール」または「チェックアウト」の全体を入力した場合よりも長い時間待つ必要があります。 zshzleのmanページに注目すべき点は何もありませんでしたが、何かを見落としましたか?他のシェルにこの機能はありますか? 編集:ささいな答え。したがって、代わりに:zshがタブの完了に実行に比較的長い時間がかかると推定し、代わりにユーザーがこれを実行するかどうかを尋ねる方法はありますか?
10 zsh  autocomplete 

2
zshでスペースを含む要素をリストする
この時点で2時間ずっとzshスクリプトを勉強していて、壁にぶつかりました。スペースが含まれている可能性のあるファイルのリストを確認したい。スクリプトを実行しようとしているタスクではなくzshを勉強しているため、zshである限り、次の例とはまったく異なるアプローチを受け入れることができます。 files=(`ls`) for f in $files; do print $f done 私は明らかに単に再作成しているのではなく、ループの各反復でファイル名全体をキャプチャしlsたいだけです$f。
10 shell  scripting  zsh 

1
zshのFPATH:関数とサイト関数
.zshrcファイルの先頭近くに次の行があることに気づきました。 export FPATH=/usr/share/zsh/site-functions:/usr/share/zsh/4.2.6/functions:$FPATH これを自分で入力したのか、この行がによって自動的に生成されたのか思い出せません zsh-newuser-install。 ユーザーがこれらのパスをFPATHスタートアップファイルに入力すると想定されていますか?違いは何だfunctionsとはsite-functions?
10 zsh 

2
zshでのLS_COLORSのテスト
数年前に、で設定した色に従って、ファイルの各タイプを対応する色で印刷する興味深いコードスニペットを見つけましたLS_COLORS。残念ながら、リンクを思い出せなくなりました。 ここtest_colors.shに問題のスニペットがあります eval $(echo "no:global default;fi:normal file;di:directory;ln:symbolic link;pi:named pipe;so:socket;do:door;bd:block device;cd:character device;or:orphan symlink;mi:missing file;su:set uid;sg:set gid;tw:sticky other writable;ow:other w\ ritable;st:sticky;ex:executable;"|sed -e 's/:/="/g; s/\;/"\n/g') { IFS=: for i in $LS_COLORS do echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m" done } スニペットはでうまく機能しますがbash、では機能しませんzsh。理由はわかりません。で実行するとzsh、次のエラーが発生します。 > sh .test_colors.sh .eval_colors:1: …
10 zsh  ls  colors 

1
シェル関数でzshの既存のオートコンプリートを利用するにはどうすればよいですか?
いくつかのシェル関数が自分.zshrcで定義されており、入力を省略して画面との統合を可能にします。例えば: function s() { screen -t "$1" ssh "$@" } ただし、これらのシェル関数を使用すると、zshに組み込まれているコマンド補完機能を利用できません。(SSHの場合、known_hostsおよびssh_configに基づいてホスト名を自動的に補完します)。ラッパーを作成したコマンドの既存の補完メカニズムにフックするための好ましい方法は何ですか? 編集: 以下の答えをくれたGillesに感謝します。これを行うにはcompdefを使用する方法のように見えますが、興味深いことに、均一に機能するようには見えません。この場合、私は次の設定をしています: function s() { screen -t "$1" ssh "$@" } function m() { screen -t "man.$1" man "$1" } compdef $_comps[man] m compdef $_comps[ssh] s ラッパー関数「m」の補完は期待どおりに機能しますが、関数「s」の補完は機能しません。ホスト名を完成させるのではなく、「タブ」を押すとファイルのリストが表示されるため、デフォルトのオートコンプリートにフォールバックするようです。SSH完了の処理方法に奇妙な点がありますか?これは、さらに何かをする必要があることを意味しますか?
10 zsh  autocomplete 

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