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

Kornシェル(ksh)は、高度なスクリプト機能を備えたシェルであり、商業用のuniceおよび一部のBSDシステムで一般的に使用されていますが、Linuxではほとんど使用されていません。

2
シェルスクリプトで些細な文字をエスケープするのはなぜですか?
レガシーシェルスクリプト(Solarisの古いksh88で作成された)を開いたところ、コード全体で次のことが繰り返されていることがわかりました。 [ -f $myfile ] && \rm -f $myfile バックスラッシュのエスケープは、私を奇妙に感じます。 この種の(明らかに役に立たない)エスケープはコード全体で繰り返されるため、意図的に行われていることを知っています。元の著者はいなくなってしまったので、私は彼と連絡を取って彼に尋ねることはできません。 これは単に著者の面白い特異性ですか、それともある時点で意味のある非推奨の良い習慣ですか?それとも、実際に物事を行うための推奨方法であり、私は完全に何かを見逃していますか?

7
実行時にスクリプト内のシェルを決定します
私の知る限りでは、シェルで使用echo $0している現在のシェルを判別するために。むしろ、どのシェルで実行されているかをスクリプトに確認してもらいたいです。そのため$0、スクリプトで印刷しようとしましたが、スクリプトの名前が正しく返されます。だから、私の質問は、実行中にスクリプトが実行されているシェルをどのように見つけることができますか?
22 linux  shell  ksh 


5
リストされているファイルのサイズを合計する方法はありますか?
これはいくつかのファイルをリストするために使用しているコマンドです: find . -name \*.extract.sys -size +1000000c -exec ls -lrt {} \; -rw-r--r-- 1 qa1wrk15 test 1265190 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_7.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1345554 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_2.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1370532 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_3.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1399854 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_8.20110929.extract.sys 等々。 次に、5番目の列を合計して、これらのファイルの合計サイズを計算します。を使用awkしてこれを行うことを考えたので、特定のディレクトリで次をテストしました …

2
// 1 /の意味
Kornシェルを使用したQNX4オペレーティングシステム。これは.profileファイルにあります。 export VARDIR=//1/usr/pvcs // 1 /は何を表していますか?
19 ksh  qnx 

1
ksh88でYYYYMMDDHHMMSS形式で現在の日付と時刻を取得する方法は?
私の要件は、2つのタイムスタンプの差を時間単位で取得することです。 日付の差分オプションを理解するのに時間がかかっているため、両方の日付をYYYYMMDDHHMMSS形式に変換して、数値の差を見つけようとしています。そのため、現在の日付と時刻を同じ形式で取得する必要があります。
18 ksh  date 

11
diff出力を色付けする方法は?
Unixファイルを条件付きでフォーマットしたかったのですが、現在diffコマンドに取り組んでおり、diffコマンド出力のテキストをフォーマットできるかどうかを知りたいと思いました。 例: 一致した値は緑色で表示されます。 一致しない値は赤で表示されます。 私は2つのファイルを持っていると仮定file1してfile2、私のコマンドがありますdiff file1 file2。 ここで、出力に5つの不一致が含まれていると仮定して、それらの不一致を赤色で表示する必要があります。UNIXを使用してこれを達成する方法は? 要するに、「不一致の値に対するdiffコマンドの出力の色を赤に変更する」
18 bash  ksh  diff 



8
チェック変数はシェルのようなBourneの配列ですか?
配列変数をサポートするBourne like shellでは、変数が配列であるかどうかを確認するために何らかの解析を使用できます。 以下のすべてのコマンドは、実行後に実行されましたa=(1 2 3)。 zsh: $ declare -p a typeset -a a a=( 1 2 3 ) bash: $ declare -p a declare -a a='([0]="1" [1]="2" [2]="3")' ksh93: $ typeset -p a typeset -a a=(1 2 3) pdksh およびその派生物: $ typeset -p a set -A a typeset a[0]=1 …
14 bash  shell  zsh  ksh  yash 

4
正規表現でscpする方法
kshで、文字「a」で始まらないすべてのファイルをコピーしようとしています。 ソースマシンから宛先マシンへのコピーは正常に機能しています。 scp -p !(a*) user@machine:/path/directory/. しかし、私が宛先サーバーにいて、ソースサーバーからコピーしたい場合、失敗しています: scp -p user@machine:/path/!(a*) . 何か案は?
13 ksh  scp 

1
ksh93はコマンド置換でフォークをどのように回避しますか
与えられた cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))' シェルはそれを実現するために2つのフォークを作る必要がある傾向があります strace-f(){ strace -f "$@" 2>&1; }; for sh in dash bash zsh ksh; do printf "$sh\t" ; strace-f $sh -c "$cmd" |grep -e clone -e fork -c; done ksh一度もフォークせずに英雄的に作成する場合を除きます: dash 2 bash 2 zsh 2 ksh 0 それはどうやって? 編集: パイプがスローされると、次のようになります。 …

7
kshのバージョンを安全に入手するにはどうすればよいですか?
kshスクリプト内からkshのバージョンを安全に取得するにはどうすればよいですか? 私は次の解決策を見ました: ksh --version echo ${.sh.version} echo $KSH_VERSION そして、適切な状況を考えると、これらはそれぞれ正常に機能します。しかし、私は完璧ではないケースに関心があります。 具体的には、古いバージョンのkshを使用しているいくつかのマシンがありますが、私の目的のために、機能が大幅に不足しています。とにかく、バージョンを(プログラムで)チェックする理由は、kshバージョンが性能の低いバージョンの1つであるかどうかを確認するためです。もしそうなら、あまり素晴らしいコードではないブランチを実行したいです。 しかし、問題のあるマシンでは、シェルの無能さはバージョンのチェックにまで及びます... 試してみるとksh --version、何も表示されず、ksh!の新しいインスタンスが開きます。 私が試みるならecho ${.sh.version}、kshこれを捨てることができない構文エラーとしてこれを扱います2> /dev/null。 $ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitution もちろんecho $KSH_VERSION正常に動作するように見えます-クラッシュしないことを意味します-これらのマシンでは空白です。また、私は見たどこかKSH_VERSIONのみで設定されているがpdksh。 質問: kshプログラムでバージョンを安全に確認するにはどうすればよいですか?ここでの目的のために、実際のバージョン番号が何であるかは気にしませんksh。それがの古いバージョンであるかどうかだけです。 で$KSH_VERSION十分に良いですか?空白の場合、ksh必然的に古いバージョンですか?他のフォーラムは正しいのkshですか? これを確認する方法はまったくありませんか?

3
パイプするtarですが、-v詳細出力はSTDERRとは別にしてください
通常のtarコマンド tar cvf foo.tar ./foo >foo.out 2>foo.err 3つの出力IOストリームがあります データをfoo.tarにアーカイブする STDOUTへのファイル名のリスト(foo.outにリダイレクトされる) STDERRへのエラーメッセージ(foo.errにリダイレクトされる) 次に、ファイル名のリストを読む必要なく、エラーメッセージについてfoo.errを検査できます。 アーカイブデータで何かをしたい場合(netcatまたは特別な圧縮プログラムにパイプを介して)、tarの-f -オプションを使用でき ます。 tar cvf - ./foo 2>foo.err | squish > foo.tar.S しかし、tarの-v出力は明らかにSTDOUT(アーカイブデータが流れる場所)に行くことができないため、ファイル名のリストはエラーメッセージと混在しています。 Kornシェルを使用して、アーカイブストリームを別のコマンドにパイプ処理しながら、-vエラーメッセージとは別に出力をキャプチャするコマンドを作成する方法はありますか。
12 tar  ksh  io 

2
6か月以上経過したファイルを削除するスクリプト
スクリプトを開始するために、月に1回cronジョブを設定します。 スクリプトは、ファイルが大きくなりすぎると毎月ファイルをローテーションし、古いファイルの名前を変更することです。6か月以上経過したファイルを削除する必要がありました。 このスクリプトを月に1回実行することを検討しています。古いものを削除することは可能ですか? それが十分に明確でない場合はお知らせください。
12 scripting  ksh 

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